itext7 : html转PDF
需求分析 :将html模板,在填充数据后转换为pdf
itext7进行html转换使用类:com.itextpdf.html2pdf.HtmlConverter。它主要有三类操作:convertToPdf直接转换为pdf文件。convertToDocument转为document文档,这样有利于进行pdf页面调整。convertToElements拆解pdf标签。我这里因为html转换后会有多页,这里通过convertToDocument调整页面大小,在一页上显示所有内容;同时我使用ByteArrayOutputStream类,这个的好处是不在本地生成文件,减少磁盘操作,但是这种方式也有人说效率不高,使用者可以斟酌后使用.
开发步骤 :
1.添加pom.xml
<!-- pdfHTML -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>html2pdf</artifactId>
<version>1.0.2</version>
</dependency>
<!-- add all iText 7 Community modules --,如果需要中文,需要引人语言包>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext7-core</artifactId>
<version>7.0.5</version>
<type>pom</type>
</dependency>
2.html转pdf
public class Html2PdfUtil {
public static void main(String[] args) throws Exception {
String html = "<p><span style=\"font-family: Microsoft YaHei;\">微软雅黑: 粗体前A<strong>A粗体A</strong>A粗体后</span></p>\n" +
"<p><span style=\"font-family: SimSun;\">宋体: 粗体前A<strong>A粗体A</strong>A粗体后</span></p>\n" +
"<p><span style=\"font-family: STHeiti;\">黑体: 粗体前A<strong>A粗体A</strong>A粗体后</span></p>" +
"<p><span style=\"font-family: Times New Roman;\">Times New Roman: pre bdA<strong>AbdA</strong>Aaft bd</span></p>\n";
FileOutputStream fileOutputStream = new FileOutputStream("D:/Test/a.pdf");
fileOutputStream.write(convert(html));
fileOutputStream.close();
public static byte[] convert(String html) throws IOException {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ConverterProperties props = new ConverterProperties();
FontProvider fp = new FontProvider(); // 提供解析用的字体
fp.addStandardPdfFonts(); // 添加标准字体库、无中文
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
fp.addDirectory(classLoader.getResource("fonts").getPath()); // 自定义字体路径、解决中文,可先用绝对路径测试。
props.setFontProvider(fp);
// props.setBaseUri(baseResource); // 设置html资源的相对路径