itext7——通过html模板生成pdf
目录
- 1、准备html格式的模板
- 2、在项目中引入包
- 3、代码实现
- 4、注意事项
- 5、补充
代码:https://github.com/leexiangg/itext7
itext7官方参考文档:https://kb.itextpdf.com/home/it7kb
1、准备html格式的模板
- 可以先把需要生成的文档只作为word,生成html格式,推荐的在线导出网站:http://www.docpe.com/word/word-to-html.aspx
- 在ue中格式化html后,精简优化html代码,删除多余标签、空格、空行等。
- 把“黑体”或者“加粗”替换为“STHeiti”,把“宋体”替换为“SimSun”。
- 表格用百分比设置宽度。
- 增加页数css配置。
- 文档中长度单位最好使用pt。
2、在项目中引入包
<!-- 生成html模板 -->
<dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.30</version>
</dependency>
<!--itext7 html转pdf用到的包-->
<dependency><groupId>com.itextpdf</groupId><artifactId>html2pdf</artifactId><version>3.0.1</version>
</dependency>
<!--itext7 中文支持-->
<dependency><groupId>com.itextpdf</groupId><artifactId>font-asian</artifactId><version>7.1.12</version>
</dependency>
<!--日志支持-->
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId><version>1.7.30</version>
</dependency>
3、代码实现
import com.itextpdf.html2pdf.ConverterProperties;
import com.itextpdf.html2pdf.HtmlConverter;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.font.FontProvider;
import freemarker.cache.ClassTemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.Template;import java.io.*;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;/*** 生成PDF文件*/
public class PdfFile {/*** 填充html模板* @param templateFile 模板文件名* @param args 模板参数* @param pdfFile 生成文件路径*/public static void template(String templateFile, Map<String, String> args, String pdfFile) {FileOutputStream output = null;try {// 读取模板文件,填充模板参数Configuration freemarkerCfg = new Configuration(Configuration.VERSION_2_3_30);freemarkerCfg.setTemplateLoader(new ClassTemplateLoader(PdfFile.class, "/template/"));Template template = freemarkerCfg.getTemplate(templateFile);StringWriter out = new StringWriter();if (args != null && args.size() > 0)template.process(args, out);String html = out.toString();// 设置字体以及字符编码ConverterProperties props = new ConverterProperties();FontProvider fontProvider = new FontProvider();PdfFont sysFont = PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H", false);fontProvider.addFont(sysFont.getFontProgram(), "UniGB-UCS2-H");fontProvider.addStandardPdfFonts();fontProvider.addFont("template/simsun.ttc");fontProvider.addFont("template/STHeitibd.ttf");props.setFontProvider(fontProvider);props.setCharset("utf-8");// 转换为PDF文档if(pdfFile.indexOf("/") > 0) {File path = new File(pdfFile.substring(0, pdfFile.indexOf("/")));if (!path.exists())path.mkdirs();}output = new FileOutputStream(new File(pdfFile));PdfDocument pdf = new PdfDocument(new PdfWriter(output));pdf.setDefaultPageSize(PageSize.A4);Document document = HtmlConverter.convertToDocument(html, pdf, props);document.getRenderer().close();document.close();} catch (Exception e) {e.printStackTrace();} finally {try {if(output != null)output.close();} catch (IOException e) {e.printStackTrace();}}}public static void main(String[] args) {Map<String, String> para = new HashMap<String, String>();para.put("var1", "这个值是填充的变量");para.put("tab1", "<tr><td>1</td><td>第一个项目</td><td>第一个项目的具体内容</td></tr><tr><td>2</td><td>第二个项目</td><td>第二个项目的具体内容</td></tr>");template("template.html", para, "tmp/" + new Date().getTime() + ".pdf");}}
4、注意事项
- 字体文件 simsun.ttc、STHeitibd.ttf 请从 github代码 中下载。
- 如果有问题,可以到 itext7 官方文档中查看示例。
5、补充
在使用过程中,发现在css中定义的页码不知道什么情况下,统计总页数不准确。
修改为先生成一个文档,再把页码添加进去。https://kb.itextpdf.com/home/it7kb/examples/adding-page-numbers-to-an-existing-pdf
itext7——通过html模板生成pdf相关推荐
- 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 ...
- itext 根据模板 生成pdf 多行数据
前言:基于 html + ccs + itext + 字符串替换完成的.简单,依赖的 jar 少... 根据 pdf模板 生成 pdf , 1. 不能有循环的数据(可能有,但我并没有找到): 2. t ...
- java导出pdf文件并下载_java根据模板生成pdf文件并导出
1.首先需要依赖包:itext的jar包,我是maven项目,所以附上maven依赖 [html] view plain copy com.itextpdf itextpdf 5.5.10 [html ...
- Java使用Adobe Acrobat DC根据PDF模板生成PDF文件
制作模板 首先需要安装Adobe Acrobat DC来制作模板 打开dc工具-->准备表单,然后打开你需要制作的pdf源文件 将文本域拖到你需要代码替换的位置 你可以双击文本域修改当前文本域的 ...
最新文章
- vscode 配置 Latex 编译后自动清理多余文件(.log .out等文件)
- java 方法不同_java同一个类不同方法间的同步
- 如何通俗的理解KKT条件
- buildpack_使用Buildpack容器化Spring Boot应用程序
- 量子计算机 计算混沌,深入了解量子混沌可能是量子计算机的关键
- php 滑动 图片,JQuery图片滑动
- CentOS学习笔记 - 7. jekins安装 1
- 整理一下N年前写的java web考勤管理系统
- 树莓派cm3+的i2c使用总结
- Android程序员该如何进阶?,2021Android面经
- 毁掉一个孩子的几个方法 有多少家长正在这么做?
- excel多列合并成一列加符号_Excel中如何将每行空格数据隔开为多列,以及如何合并多列数据为一列...
- NeuroImage:磁共振3D梯度回波磁化转移序列同时对铁和神经黑色素进行成像—用于帕金森病生物标志物研究
- mybatis多表操作(一对一、一对多、多对多)
- 2015usnews美国大学计算机排名,2015年USNews美国大学研究生计算机工程专业排名
- 英语语法最终珍藏版笔记-11分词
- initrd和initramfs的区别
- 存储过程和存储函数的关系及使用方法
- 点菜系统服务器,电子菜谱点菜系统
- ie浏览器打不开计算机二级页面,是什么情况?
热门文章
- Marva Collin's Way
- 去噪自动编码器(DAE)
- SAP CO模块 KSV5 费用分摊分配解析
- Linux alsa 声卡驱动 安装 卸载 设置默认声卡
- 在桌边垒砖块,求砖块右端距离桌边最大距离
- 初中计算机主要教哪些知识,初中信息技术教学知识点整理(2020年整理)(6页)-原创力文档...
- H5与其他平台交互框架
- 数据中心服务器机柜电气参数,数据中心服务器机柜一些安装与参数
- Stata:如何正确检验U型关系的存在
- 远程控制网吧服务器,方便维修,电脑坏了不用愁,向日葵电脑远程维修省时又省力...