工具方法:public void createPdf(String htmlFilePath,SelectParamRequest paramRequest){    if(paramRequest.getProductNamr() == null || paramRequest.getClassificationName() == null){        System.out.println("有空值!!!");        return;    }    //2.读取对应文件位置的html模板    String htmlStr = PDFUtil.readHtmlFileByPath(htmlFilePath);    //3.替换模板html中对应的元素    htmlStr = changeHtmlTemp (htmlStr, paramRequest);    //4.由于jsoup转换html时不是按照xhtml格式,因此需要jtidy进行一次转换    htmlStr = PDFUtil.changeHtmlStrToXhtml(htmlStr);    //5.生成对应路径下的pdf  生成pdf的路径,pdf名字    PDFUtil.createPDFFileByHtmlStrInPath (htmlStr, paramRequest.getPDFPath(),paramRequest.getPDFName());}
//2.读取对应文件位置的html模板
private static final String ENCODING="UTF-8";

    public static String readHtmlFileByPath (String htmlFilePath) {        System.out.println("读取的模板路径:"+ htmlFilePath);        StringBuilder content = new StringBuilder ();        String lineStr;        InputStream fileInputStream = null;        BufferedReader reader = null;        try {            //1.读取对应文件位置的html模板/static/temphtml/product.html/*            fileInputStream = new FileInputStream("E:\\workspace\\mytest\\alibaba\\src\\main\\resources\\static\\temphtml\\product.html");*/            fileInputStream = PDFUtil.class.getResourceAsStream (htmlFilePath);

            if (fileInputStream==null){                System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!1");            }            reader = new BufferedReader(new InputStreamReader(fileInputStream, ENCODING));            while ((lineStr = reader.readLine()) != null) {                content.append (lineStr);                content.append("\n");            }        } catch (FileNotFoundException e) {            throw new MyException("对应路径["+htmlFilePath+"]文件没找到",e.getMessage());        } catch (IOException e) {            throw new MyException("读取对应路径["+htmlFilePath+"]文件错误",e.getMessage());        } finally {            if (fileInputStream != null) {                try {                    fileInputStream.close ();                } catch (IOException e) {                    throw new MyException("关闭["+htmlFilePath+"]文件流异常",e.getMessage());                }            }        }        return content.toString ();    }
//3.替换模板html中对应的元素
public String changeHtmlTemp (String htmlStr,SelectParamRequest paramRequest) {    Document doc = Jsoup.parse (htmlStr);    Element fenleinameEle = doc.getElementById ("fenlei");   //对应html标签的id值    fenleinameEle.text (paramRequest.getClassificationName());    Element chanpinEle = doc.getElementById ("chanping");    chanpinEle.text(paramRequest.getProductNamr());    Element xinghaoEle = doc.getElementById ("xinghao");    xinghaoEle.text (paramRequest.getSpecifacationName());

    return doc.html();}
public static String changeHtmlStrToXhtml(String htmlStr) {    ByteArrayInputStream inStream = new ByteArrayInputStream(htmlStr.getBytes());    ByteArrayOutputStream tidyOutStream = new ByteArrayOutputStream();    Tidy tidy = new Tidy();    tidy.setInputEncoding(ENCODING);    tidy.setQuiet(true);    tidy.setOutputEncoding(ENCODING);    tidy.setShowWarnings(false); //不显示警告信息    tidy.setIndentContent(true);//    tidy.setSmartIndent(true);    tidy.setIndentAttributes(false);    tidy.setWraplen(1024); //多长换行    //输出为xhtml    tidy.setXHTML(true);    tidy.setErrout(new PrintWriter(System.out));    tidy.parse(inStream, tidyOutStream);    return tidyOutStream.toString();}
  public static void createPDFFileByHtmlStrInPath (String htmlStr, String storagePath,String pdfName){        FileOutputStream fileOutputStream = null;        try {            File path = new File (storagePath);            File file = new File(path,pdfName);

            if(! path.exists()) {                path.mkdirs();            }            if ( !file.exists()) {                if(!file.createNewFile ()){                    throw new MyException("对应地址["+storagePath+"]文件创建失败");                };            }            fileOutputStream = new FileOutputStream (file);            ITextRenderer renderer = new ITextRenderer ();            // 解决中文支持问题            ITextFontResolver resolver = renderer.getFontResolver ();            resolver.addFont ("/static/font/arialuni.ttf", BaseFont.IDENTITY_H,                    BaseFont.NOT_EMBEDDED);            resolver.addFont ("/static/font/simhei.ttf", BaseFont.IDENTITY_H,                    BaseFont.NOT_EMBEDDED);            resolver.addFont ("/static/font/simsun.ttc", BaseFont.IDENTITY_H,                    BaseFont.NOT_EMBEDDED);            renderer.setDocumentFromString (htmlStr);            // 解决图片的相对路径问题,图片路径必须以file开头//            renderer.getSharedContext().setBaseURL("file:/");            renderer.layout ();            renderer.createPDF (fileOutputStream);        } catch (IOException e) {            throw new MyException("向["+storagePath+"]路径生成pdf流错误",e.getMessage());        } catch (DocumentException e) {            throw new MyException("向["+storagePath+"]路径生成pdf文件流异常",e.getMessage());        } finally {            if (fileOutputStream != null) {                try {                    fileOutputStream.close ();                } catch (IOException e) {                    throw new MyException("向["+storagePath+"]路径生成pdfio关闭异常",e.getMessage());                }            }        }    }

html模板:注意要设置
<style type="text/css">    .pdfBody{        margin-left: 2em;        font-size: 1.2em;        font-family: SimSun;        color: #666666;        margin-top: 3em;    }</style>
<body >

    <div class="pdfBody">        分类:<input type="text" id="fenlei"><br>

        产品:<input type="text" id="chanping"><br>

        型号:<input type="text" id="xinghao"><br>

        <div>添加型号tjsx</div>    </div>

</body>

测试:
@RequestMapping("/createPdf.json")@ResponseBodypublic void createPdf(){    SelectParamRequest paramRequest = new SelectParamRequest();    paramRequest.setClassificationName("服装");    paramRequest.setProductNamr("童装");    paramRequest.setSpecifacationName("米老鼠");    paramRequest =  initReceiptInfo(paramRequest);    try {        productService.createPdf("/static/temphtml/product.html",paramRequest);    } catch (Exception e) {        e.printStackTrace();        System.out.println(e.getCause().getLocalizedMessage());    }}效果图:



转载于:https://www.cnblogs.com/it-yansx666/p/9257394.html

html模板转pdf相关推荐

  1. java根据模板导出pdf,java开发面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  2. 使用com.aspose.words将word模板转为PDF乱码解决方案(window下正常)

    使用com.aspose.words将word模板转为PDF乱码解决方案(window下正常) 参考文章: (1)使用com.aspose.words将word模板转为PDF乱码解决方案(window ...

  3. PdfSharp -- 根据PDF模板导出PDF

    PdfSharp:v1.50.5147,.NET Framework:v4.5.1 一.PDF模板 在开始前,我觉得有必要简单说一下PDF模板 制作PDF模板的工具有很多,随便找一款就行(我这里用迅捷 ...

  4. freemarker模板生成pdf文件

    文章目录 1.pom依赖 2.ftl模板以及宋体文件 2.1.文件路径 2.2.ftl文件模板(test.ftl) 3.controller生成pdf文件 1.pom依赖 <!--freemar ...

  5. java 制作pdf模板,Java-pdf模板制作流程-使用pdf 模板生成pdf文件

    Java 使用pdf 模板生成pdf文件 --制作流程 1.      使用工具 adobe acrobat dc.word 2015 2.      使用 word 繪制一個 3*5 的表格並保存, ...

  6. java 模板生成PDF文件 复选框勾选

    java 模板生成PDF文件 复选框勾选 // pdf填充时要有第三个参数s.setField("A", On, true);

  7. java pdf工具类_Java PDF工具类(一)| 使用 itextpdf 根据PDF模板生成PDF(文字和图片)...

    Java PDF工具类(一)| 使用 itextpdf 根据设置好的PDF模板填充PDF(文字和图片) 相关文章: Java PDF工具类(二)| 使用 wkhtmltox 实现 HTML转PDF(文 ...

  8. Java使用Itext5与html模板生成pdf并支持下载

    Java使用Itext5与html模板生成pdf 文章目录 Java使用Itext5与html模板生成pdf 前言 一.引入依赖 二.相关使用说明 1.工具类 2.模板配置 3.模板的抽象类(定义了相 ...

  9. itext使用模板生成pdf文件

    用pdf模板生成pdf文档很简单,首先需要手动做个pdf模板,上面有很多的类似html里的text域的东西, 给他们起好名字,在程序里填充就可以了.虽然由于不会做模板(实际上由于短时间无法去熟悉使用A ...

  10. itext模板生成pdf 后添加动态表格

    需求:pdf较为复杂部分利用模板生成,但是后续还需要补充动态数据表格 模板生成参考 itextpdf 利用模板生成pdf 下载_音乐土豆的博客-CSDN博客 注意 1.读取了模板写入数据之后再用doc ...

最新文章

  1. 免费学python的网站-免费学习Python编程的3个优秀的网站资源
  2. Windows服务的程序方面的资料
  3. Chrome OS 设备或将允许用户自行选择 Linux 发行版
  4. Codeforces Round #296 (Div. 1) D. Fuzzy Search FFT匹配字符串
  5. Android逆向笔记-IDA Pro动态调试Android程序(真机)
  6. (1)JavaScript入门
  7. 杉德支付php代码实现_php实现微信支付的代码
  8. Confluence 6 创建一个用户宏
  9. PHP —— 识别运算符实现逻辑比较
  10. NX/UG二次开发—装配—抑制的组件怎么获取原型
  11. 这将是你看到过最全的pdf预览解决方案
  12. 三款适用于企业建站的CMS建站系统
  13. 巨潮网怎么下载年报_如何下载上市公司的年度报告
  14. BK3432和BK3431Q芯片开发问题
  15. 【QT数字图像处理】(三)QSlider滑块学习
  16. WKWebView 使用及注意点(keng)
  17. C语言:判断两数是否互质
  18. jxl 统计图_cad的图形为什么会自动重叠成两层图形
  19. 2020中国最佳创新公司50榜单正式发布,哔哩哔哩、理想汽车等上榜
  20. 下载 https://github.com/android 上的全部源代码

热门文章

  1. 软件开发方法与需求分析
  2. php允许上传的文件后羿_礼光后羿4.1.112安装、注册、使用
  3. Modern Family S01E05 part5
  4. iOS 类似虾米音乐侧滑动画解析(1)
  5. 物联网时代 智能停车应用技术分析
  6. fullpage 的方法介绍及使用
  7. android19是哪款手机,你心目中的2019年安卓手机机皇是哪一款?
  8. CBA全明星赛再遭吐槽,是因为不用心吗?
  9. 计算机考研复试之C语言编程题
  10. java 时间戳 工具类_JAVA时间戳工具类