openpdf
主要依赖
<dependency>
<!-- 将 html 转换为 xml 工具库 -->
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.17.1</version>
</dependency>
<dependency>
<!-- 第三方 openpdf 包装库,提供 html 转 pdf 功能 -->
<groupId>org.xhtmlrenderer</groupId>
<artifactId>flying-saucer-pdf-openpdf</artifactId>
<version>9.3.1</version>
</dependency>
测试代码
// 获取 java 版本
String version = System.getProperty("java.specification.version");
// 获取系统类型
String platform = System.getProperty("os.name", "");
platform = platform.toLowerCase().contains("window") ? "win" : "linux";
// 当前程序目录
String current = System.getProperty("user.dir");
System.out.println(String.format("current=%s", current));
// html 文件路径
File index = Paths.get(current, "..", "index.html").toFile();
if (!index.exists()) {
System.out.println(String.format("file not exist,file=%s", index.getAbsolutePath()));
return;
}
try {
Document document = Jsoup.parse(index, "UTF-8");
// 补全标记
document.outputSettings().syntax(Document.OutputSettings.Syntax.xml);
ITextRenderer render = new ITextRenderer();
ITextFontResolver fontResolver = render.getFontResolver();
File[] fonts = Paths.get(current, "..", "fonts").toFile().listFiles();
for (File item : fonts) {
// 应该这样添加字体
fontResolver.addFont(item.getAbsolutePath(), BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
}
SharedContext sharedContext = render.getSharedContext();
sharedContext.setPrint(true);
sharedContext.setInteractive(false);
sharedContext.getTextRenderer().setSmoothingThreshold(0);
// 自定义图片解析
// sharedContext.setReplacedElementFactory(new ReplacedElementFactoryImpl());
// 指定根目录,这里需要 URL 格式
// file:/D:/work/linux-html2pdf-demo/openpdf-demo/../
String baseUrl = Paths.get(current, "..").toUri().toURL().toString();
render.setDocumentFromString(document.html(), baseUrl);
render.layout();
File file = Paths.get(current, String.format("java%s_%s.pdf", version, platform)).toFile();
FileOutputStream stream = new FileOutputStream(file);
render.createPDF(stream);
stream.close();
System.out.println(String.format("file=%s", file.getAbsolutePath()));
} catch (IOException e) {
throw new RuntimeException(e);
}
效果预览
openpdf-demo/java1.8_win.pdf · yjihrp/linux-html2pdf-demo - Gitee.com
openpdf-demo/java11_linux.pdf · yjihrp/linux-html2pdf-demo - Gitee.com
测试结果
下一篇 4-LINUX HTML 转 PDF-PDFBOX