html模板转pdf
工具方法: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相关推荐
- java根据模板导出pdf,java开发面试笔试题
我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...
- 使用com.aspose.words将word模板转为PDF乱码解决方案(window下正常)
使用com.aspose.words将word模板转为PDF乱码解决方案(window下正常) 参考文章: (1)使用com.aspose.words将word模板转为PDF乱码解决方案(window ...
- PdfSharp -- 根据PDF模板导出PDF
PdfSharp:v1.50.5147,.NET Framework:v4.5.1 一.PDF模板 在开始前,我觉得有必要简单说一下PDF模板 制作PDF模板的工具有很多,随便找一款就行(我这里用迅捷 ...
- freemarker模板生成pdf文件
文章目录 1.pom依赖 2.ftl模板以及宋体文件 2.1.文件路径 2.2.ftl文件模板(test.ftl) 3.controller生成pdf文件 1.pom依赖 <!--freemar ...
- java 制作pdf模板,Java-pdf模板制作流程-使用pdf 模板生成pdf文件
Java 使用pdf 模板生成pdf文件 --制作流程 1. 使用工具 adobe acrobat dc.word 2015 2. 使用 word 繪制一個 3*5 的表格並保存, ...
- java 模板生成PDF文件 复选框勾选
java 模板生成PDF文件 复选框勾选 // pdf填充时要有第三个参数s.setField("A", On, true);
- java pdf工具类_Java PDF工具类(一)| 使用 itextpdf 根据PDF模板生成PDF(文字和图片)...
Java PDF工具类(一)| 使用 itextpdf 根据设置好的PDF模板填充PDF(文字和图片) 相关文章: Java PDF工具类(二)| 使用 wkhtmltox 实现 HTML转PDF(文 ...
- Java使用Itext5与html模板生成pdf并支持下载
Java使用Itext5与html模板生成pdf 文章目录 Java使用Itext5与html模板生成pdf 前言 一.引入依赖 二.相关使用说明 1.工具类 2.模板配置 3.模板的抽象类(定义了相 ...
- itext使用模板生成pdf文件
用pdf模板生成pdf文档很简单,首先需要手动做个pdf模板,上面有很多的类似html里的text域的东西, 给他们起好名字,在程序里填充就可以了.虽然由于不会做模板(实际上由于短时间无法去熟悉使用A ...
- itext模板生成pdf 后添加动态表格
需求:pdf较为复杂部分利用模板生成,但是后续还需要补充动态数据表格 模板生成参考 itextpdf 利用模板生成pdf 下载_音乐土豆的博客-CSDN博客 注意 1.读取了模板写入数据之后再用doc ...
最新文章
- Kali Linux安装第三方软件
- python读取大文件-python快速读取一个大文件内容(瞎猜)
- 2014-06-27nbsp;20:47
- 专栏 | 基于 Jupyter 的特征工程手册:特征选择(二)
- Java正则表达式应用详解
- mysql修改字段的顺序_Mysql中如何修改字段的排列顺序?
- 数据科学还是计算机科学_您应该拥有数据科学博客的3个原因
- 《Python Cookbook 3rd》笔记(1.20):合并多个字典或映射
- 只需12 个步骤,就能在AWS中创建自定义VPC,用过都惊了!
- 【springmvc】@RequestParam详解以及加与不加的区别
- HDU 5514 Frogs (容斥原理)
- 接口接收数据_基于原语的千兆以太网RGMII接口设计
- 圆柱体积计算机公式,圆柱的体积计算公式是什么 怎么计算
- 耳机在Mac上听不到声音怎么办?
- CSS实现文本居中和块级元素居中
- 怎么用计算机算e的次方,如何在计算器上计算e的x次方?
- 主机名 域名 网站名 URL
- UICollectioView的组头和组尾的高度不同设置
- 教你如何将小视频转发到自己的朋友圈
- 4月日本旅游签证简化办理攻略分享
热门文章
- react-BrowserRouter-nginx-二级目录配置
- named域名解析服务启动失败解决方法
- 【php毕业设计】基于php+mysql+smarttemplate的图片共享系统设计与实现(毕业论文+程序源码)——图片共享系统
- 求一个字符串的hash值
- vue表单验证-正则表达式
- Linux自动化运维工具 老男孩Linux云计算培训
- 美丽蝴蝶的flash画法
- Android手机屏幕适配知识整理
- 100天精通Python丨黑科技篇 —— 23、千图成像,爱心加倍(程序员的浪漫)
- Linux操作系统: Linux从入门到精通(educoder)