推荐文章:HTML转PDF开源利器——htmltopdf-java
项目介绍
htmltopdf-java
是一个基于 wkhtmltopdf 的开源项目,专注于将HTML文档转换为PDF格式。通过JNA(Java Native Access)技术,该项目提供了一个对Java开发者友好的接口层,使得在Java环境中进行HTML到PDF的转换变得简单而高效。
项目技术分析
htmltopdf-java
的核心技术栈包括:
- wkhtmltopdf:一个强大的HTML到PDF转换工具,基于Qt库进行网页渲染。
- JNA:Java Native Access,允许Java代码直接调用本地库(如C/C++库),无需编写JNI代码。
- Java:提供简洁的API接口,方便Java开发者集成和使用。
项目及技术应用场景
htmltopdf-java
的应用场景广泛,特别适合以下情况:
- Web应用开发:需要将网页内容或生成的HTML文档转换为PDF格式,如报表生成、电子书制作等。
- 企业级应用:需要将业务数据以PDF格式输出,便于存档和分发。
- 在线服务:提供HTML到PDF的转换服务,如在线PDF生成工具、API服务等。
项目特点
htmltopdf-java
具有以下显著特点:
- 易用性:提供简洁的Java API,方便快速集成和使用。
- 灵活性:支持从HTML字符串、URL以及多个对象进行PDF转换。
- 流式处理:支持将PDF转换结果输出为InputStream,便于直接作为HTTP响应或邮件附件。
- 线程安全:尽管wkhtmltopdf的单线程渲染限制了并发转换,但库本身是线程安全的。
快速开始
以下是一些简单的示例,帮助你快速上手:
保存HTML为PDF文件
boolean success = HtmlToPdf.create()
.object(HtmlToPdfObject.forHtml("<p><em>Apples</em>, not oranges</p>"))
.convert("/path/to/file.pdf");
保存网页URL为PDF文件
boolean success = HtmlToPdf.create()
.object(HtmlToPdfObject.forUrl("https://github.com/wooio/htmltopdf-java"))
.convert("/path/to/file.pdf");
保存多个对象为PDF文件
boolean success = HtmlToPdf.create()
.object(HtmlToPdfObject.forUrl("https://github.com/wooio/htmltopdf-java"))
.object(HtmlToPdfObject.forHtml("<p>This is the second object...</p>"))
.convert("/path/to/file.pdf");
转换为InputStream
HtmlToPdf htmlToPdf = HtmlToPdf.create()
.object(HtmlToPdfObject.forUrl("https://github.com/wooio/htmltopdf-java"));
try (InputStream in = htmlToPdf.convert()) {
// "in" has PDF bytes loaded
} catch (HtmlToPdfException e) {
// HtmlToPdfException is a RuntimeException, thus you are not required to
// catch it in this scope. It is thrown when the conversion fails
// for any reason.
}
并发限制
需要注意的是,尽管库是线程安全的,但由于wkhtmltopdf的单线程渲染机制,目前每个进程只能同时进行一个转换任务。
故障排除
如果在运行时遇到以下异常:
java.lang.UnsatisfiedLinkError: Unable to load library '/tmp/io.woo.htmltopdf/wkhtmltox/0.12.5/libwkhtmltox.so': Native library (tmp/io.woo.htmltopdf/wkhtmltox/0.12.5/libwkhtmltox.so) not found in resource path
这通常意味着缺少wkhtmltopdf的某些本地依赖包。请确保以下包已安装:
- libc6 (或 glibc)
- libx11
- libxext
- libxrender
- libstdc++
- libssl1.0
- freetype
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考