工具方法: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. Kali Linux安装第三方软件
  2. python读取大文件-python快速读取一个大文件内容(瞎猜)
  3. 2014-06-27nbsp;20:47
  4. 专栏 | 基于 Jupyter 的特征工程手册:特征选择(二)
  5. Java正则表达式应用详解
  6. mysql修改字段的顺序_Mysql中如何修改字段的排列顺序?
  7. 数据科学还是计算机科学_您应该拥有数据科学博客的3个原因
  8. 《Python Cookbook 3rd》笔记(1.20):合并多个字典或映射
  9. 只需12 个步骤,就能在AWS中创建自定义VPC,用过都惊了!
  10. 【springmvc】@RequestParam详解以及加与不加的区别
  11. HDU 5514 Frogs (容斥原理)
  12. 接口接收数据_基于原语的千兆以太网RGMII接口设计
  13. 圆柱体积计算机公式,圆柱的体积计算公式是什么 怎么计算
  14. 耳机在Mac上听不到声音怎么办?
  15. CSS实现文本居中和块级元素居中
  16. 怎么用计算机算e的次方,如何在计算器上计算e的x次方?
  17. 主机名 域名 网站名 URL
  18. UICollectioView的组头和组尾的高度不同设置
  19. 教你如何将小视频转发到自己的朋友圈
  20. 4月日本旅游签证简化办理攻略分享

热门文章

  1. react-BrowserRouter-nginx-二级目录配置
  2. named域名解析服务启动失败解决方法
  3. 【php毕业设计】基于php+mysql+smarttemplate的图片共享系统设计与实现(毕业论文+程序源码)——图片共享系统
  4. 求一个字符串的hash值
  5. vue表单验证-正则表达式
  6. Linux自动化运维工具 老男孩Linux云计算培训
  7. 美丽蝴蝶的flash画法
  8. Android手机屏幕适配知识整理
  9. 100天精通Python丨黑科技篇 —— 23、千图成像,爱心加倍(程序员的浪漫)
  10. Linux操作系统: Linux从入门到精通(educoder)