图一为原有的pdf格式的模板,图中的蓝色区域是可以填充内容的区域,区域固定不可根据填充的内容自动扩充。为了可以使模板更加灵活,设计了html模板,如图二所示,该模板构造为:第1部分是一个样式居中的<div>标签,第2、4部分是一个<table>表格,第3部分是一个具有首行缩进样式的<div>标签。

2.准备fft格式的字体文件,用户html生成pdf时的字体渲染。

二、开发工作

1.创建maven项目,导包

<!-- 添加itext 7 用到的包 --> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext7-core</artifactId> <version>${itext.version}</version> <type>pom</type> </dependency> <!--itext7 html转pdf用到的包--> <dependency> <groupId>com.itextpdf</groupId> <artifactId>html2pdf</artifactId> <version>2.0.0</version> </dependency> <!--itext7支持中文--> <dependency> <groupId>com.itextpdf</groupId> <artifactId>font-asian</artifactId> <version>7.1.2</version> </dependency> <!--jsoup 操作html的包--> <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.10.2</version> </dependency>

2.将准备的字体和html模板复制到项目的resources目录中。

* @param baseUri html用到的css、js、图片等资源根目录。 * @param src html模板文件路径 * @param dest 生成的pdf文件输出的路径 * @throws IOException public void createPdf(String baseUri, String src, String dest) throws IOException { try { //字体方案 fontProgram = FontProgramFactory.createFont(FONT); //转换为pfd中的属性设置对象 ConverterProperties proper = new ConverterProperties(); //字体设置,解决中文不显示问题 FontSet fontSet = new FontSet(); fontSet.addFont(fontProgram, PdfEncodings.IDENTITY_H); FontProvider fontProvider = new FontProvider(fontSet); proper.setFontProvider(fontProvider); //html用到的css、js、图片等资源根目录。 proper.setBaseUri(baseUri); //开始转换 HtmlConverter.convertToPdf(new FileInputStream(src), new FileOutputStream(dest), proper); } catch (java.io.IOException e) { e.printStackTrace();

准备一篇文章,如下图三所示,该文章的大小为1.07MB,将这些文字填充到html中的效果图为图四,执行程序转成pdf文件,所有时间为1680ms。