一、准备工作
1.根据原有的pdf模板,制作html模板。
image
image
图一为原有的pdf格式的模板,图中的蓝色区域是可以填充内容的区域,区域固定不可根据填充的内容自动扩充。为了可以使模板更加灵活,设计了html模板,如图二所示,该模板构造为:第1部分是一个样式居中的
2.准备fft格式的字体文件,用户html生成pdf时的字体渲染。
二、开发工作
1.创建maven项目,导包
com.itextpdf
itext7-core
${itext.version}
pom
com.itextpdf
html2pdf
2.0.0
com.itextpdf
font-asian
7.1.2
org.jsoup
jsoup
1.10.2
2.将准备的字体和html模板复制到项目的resources目录中。
image.png
3.主要实现代码
/**
*
* @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();
}
4.执行
准备一篇文章,如下图三所示,该文章的大小为1.07MB,将这些文字填充到html中的效果图为图四,执行程序转成pdf文件,所有时间为1680ms。
图三、txt文件大小
图四、html效果图