目录

  • 1、准备html格式的模板
  • 2、在项目中引入包
  • 3、代码实现
  • 4、注意事项
  • 5、补充

代码:https://github.com/leexiangg/itext7
itext7官方参考文档:https://kb.itextpdf.com/home/it7kb

1、准备html格式的模板

  1. 可以先把需要生成的文档只作为word,生成html格式,推荐的在线导出网站:http://www.docpe.com/word/word-to-html.aspx
  2. 在ue中格式化html后,精简优化html代码,删除多余标签、空格、空行等。
  3. 把“黑体”或者“加粗”替换为“STHeiti”,把“宋体”替换为“SimSun”。
  4. 表格用百分比设置宽度。
  5. 增加页数css配置。
  6. 文档中长度单位最好使用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、注意事项

  1. 字体文件 simsun.ttc、STHeitibd.ttf 请从 github代码 中下载。
  2. 如果有问题,可以到 itext7 官方文档中查看示例。

5、补充

在使用过程中,发现在css中定义的页码不知道什么情况下,统计总页数不准确。
修改为先生成一个文档,再把页码添加进去。https://kb.itextpdf.com/home/it7kb/examples/adding-page-numbers-to-an-existing-pdf

itext7——通过html模板生成pdf相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

  7. itext 根据模板 生成pdf 多行数据

    前言:基于 html + ccs + itext + 字符串替换完成的.简单,依赖的 jar 少... 根据 pdf模板 生成 pdf , 1. 不能有循环的数据(可能有,但我并没有找到): 2. t ...

  8. java导出pdf文件并下载_java根据模板生成pdf文件并导出

    1.首先需要依赖包:itext的jar包,我是maven项目,所以附上maven依赖 [html] view plain copy com.itextpdf itextpdf 5.5.10 [html ...

  9. Java使用Adobe Acrobat DC根据PDF模板生成PDF文件

    制作模板 首先需要安装Adobe Acrobat DC来制作模板 打开dc工具-->准备表单,然后打开你需要制作的pdf源文件 将文本域拖到你需要代码替换的位置 你可以双击文本域修改当前文本域的 ...

最新文章

  1. vscode 配置 Latex 编译后自动清理多余文件(.log .out等文件)
  2. java 方法不同_java同一个类不同方法间的同步
  3. 如何通俗的理解KKT条件
  4. buildpack_使用Buildpack容器化Spring Boot应用程序
  5. 量子计算机 计算混沌,深入了解量子混沌可能是量子计算机的关键
  6. php 滑动 图片,JQuery图片滑动
  7. CentOS学习笔记 - 7. jekins安装 1
  8. 整理一下N年前写的java web考勤管理系统
  9. 树莓派cm3+的i2c使用总结
  10. Android程序员该如何进阶?,2021Android面经
  11. 毁掉一个孩子的几个方法 有多少家长正在这么做?
  12. excel多列合并成一列加符号_Excel中如何将每行空格数据隔开为多列,以及如何合并多列数据为一列...
  13. NeuroImage:磁共振3D梯度回波磁化转移序列同时对铁和神经黑色素进行成像—用于帕金森病生物标志物研究
  14. mybatis多表操作(一对一、一对多、多对多)
  15. 2015usnews美国大学计算机排名,2015年USNews美国大学研究生计算机工程专业排名
  16. 英语语法最终珍藏版笔记-11分词
  17. initrd和initramfs的区别
  18. 存储过程和存储函数的关系及使用方法
  19. 点菜系统服务器,电子菜谱点菜系统
  20. ie浏览器打不开计算机二级页面,是什么情况?

热门文章

  1. Marva Collin's Way
  2. 去噪自动编码器(DAE)
  3. SAP CO模块 KSV5 费用分摊分配解析
  4. Linux alsa 声卡驱动 安装 卸载 设置默认声卡
  5. 在桌边垒砖块,求砖块右端距离桌边最大距离
  6. 初中计算机主要教哪些知识,初中信息技术教学知识点整理(2020年整理)(6页)-原创力文档...
  7. H5与其他平台交互框架
  8. 数据中心服务器机柜电气参数,数据中心服务器机柜一些安装与参数
  9. Stata:如何正确检验U型关系的存在
  10. 远程控制网吧服务器,方便维修,电脑坏了不用愁,向日葵电脑远程维修省时又省力...