废话一堆
如此简单的需求, 中文社区 和 AI 却没有给我答案。
Why?
其实 itextpdf 本身已经做的很好了,或许英文文档也很好,只是我阅读困难,英语还是不得不练啊! 唉 ~
快速实战
依赖的导入
itext-core 为核心依赖,注意 Type 为 pom,也就意味的导入了多个 Jar。
html2pdf 就是字面意思,用代码写 PDF,实在是太痛苦了,HTML 对于大家来说会轻松不少,并且 itextpdf 对 HTML5 也有支持,相信能满足你不小的需求。
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-core</artifactId>
<version>8.0.3</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>html2pdf</artifactId>
<version>5.0.4</version>
</dependency>
核心逻辑
public void convertHtmlToPdf(String htmlContent, String pdfFileName) {
try {
ConverterProperties properties = new ConverterProperties();
FontProvider fontProvider = new FontProvider();
// 常用字体程序及对应编码
fontProvider.addFont("STSongStd-Light", "UniGB-UCS2-H");
properties.setFontProvider(fontProvider);
// 将HTML字符串转换为PDF
try (var pdfStream = new FileOutputStream(pdfFileName);) {
HtmlConverter.convertToPdf(htmlContent, pdfStream, properties);
}
System.out.println("PDF created successfully.");
} catch (IOException e) {
e.printStackTrace();
}
}
这段代码并不复杂, 就是 HTML to PDF。
核心只有一行
HtmlConverter.convertToPdf(htmlContent, pdfStream, properties);
重点关注的只有 properties 中的 fontProvider, 为什么是 "STSongStd-Light", "UniGB-UCS2-H" ?
答案在这里:
可以看到 itextpdf(8.0.3)的依赖中,已经支持了中文字体。
你并不需要手动导入字体,或者去弄其他的 Jar 依赖。
HTML 模板、对象填充、文件下载
我认为直接见码更容易理解。
完整的例子写在了这里:
这是生成的 PDF 的效果:
本文由 考拉 创作,采用 知识共享署名4.0
国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Jun 3,2024