嘿,朋友!在 Java 中使用 html2pdf
把 HTML 网页生成 PDF 是个挺实用的功能。这里给你介绍几种常见的实现方式,咱就分别来唠唠。
使用 Flying Saucer 库
思路
-
引入 Flying Saucer 库及其依赖,这个库就像是一个神奇的转换器,能把 HTML 变成 PDF。
-
创建一个
ITextRenderer
对象,它是实现转换的关键“工具”。 -
把 HTML 内容或者 HTML 文件路径设置到
ITextRenderer
里。 -
调用
layout()
方法进行布局,就像给内容排好队。 -
最后调用
createPDF()
方法生成 PDF 文件。
代码示例
import com.lowagie.text.DocumentException;
import org.xhtmlrenderer.pdf.ITextRenderer;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class HtmlToPdfConverter {
public static void main(String[] args) {
try {
// 创建 ITextRenderer 对象
ITextRenderer renderer = new ITextRenderer();
// 设置 HTML 文件路径
String htmlFilePath = "path/to/your/html/file.html";
File htmlFile = new File(htmlFilePath);
renderer.setDocument(htmlFile);
// 布局
renderer.layout();
// 生成 PDF 文件
String pdfFilePath = "output.pdf";
FileOutputStream fos = new FileOutputStream(pdfFilePath);
renderer.createPDF(fos);
fos.close();
System.out.println("PDF 生成成功!");
} catch (DocumentException | IOException e) {
e.printStackTrace();
System.out.println("PDF 生成失败:" + e.getMessage());
}
}
}
代码解释及使用说明
-
首先创建
ITextRenderer
对象,它是 Flying Saucer 库中用于将 HTML 转换为 PDF 的核心类。 -
使用
setDocument()
方法设置要转换的 HTML 文件,这里你需要把path/to/your/html/file.html
替换成你实际的 HTML 文件路径。 -
调用
layout()
方法进行布局,它会根据 HTML 内容进行排版。 -
最后使用
createPDF()
方法将排版好的内容输出到指定的文件输出流中,生成 PDF 文件,这里生成的文件名为output.pdf
。
Maven 依赖
<dependency>
<groupId>org.xhtmlrenderer</groupId>
<artifactId>flying-saucer-pdf</artifactId>
<version>9.1.22</version>
</dependency>
<dependency>
<groupId>org.xhtmlrenderer</groupId>
<artifactId>flying-saucer-core</artifactId>
<version>9.1.22</version>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.7</version>
</dependency>
使用 wkhtmltopdf(通过 Java 调用命令行)
思路
-
确保系统中已经安装了
wkhtmltopdf
工具,这个工具可以在命令行中将 HTML 转换为 PDF。 -
使用 Java 的
ProcessBuilder
来调用wkhtmltopdf
命令。 -
传递 HTML 文件路径和要生成的 PDF 文件路径作为参数。
代码示例
import java.io.IOException;
public class WkHtmlToPdfConverter {
public static void main(String[] args) {
try {
// HTML 文件路径和 PDF 输出路径
String htmlFilePath = "path/to/your/html/file.html";
String pdfFilePath = "output_wkhtmltopdf.pdf";
// 构建 wkhtmltopdf 命令
ProcessBuilder pb = new ProcessBuilder("wkhtmltopdf", htmlFilePath, pdfFilePath);
// 启动进程
Process process = pb.start();
// 等待进程执行完毕
int exitCode = process.waitFor();
if (exitCode == 0) {
System.out.println("PDF 生成成功!");
} else {
System.out.println("PDF 生成失败,退出码:" + exitCode);
}
} catch (IOException | InterruptedException e) {
e.printStackTrace();
System.out.println("PDF 生成失败:" + e.getMessage());
}
}
}
代码解释及使用说明
-
首先定义 HTML 文件路径和要生成的 PDF 文件路径,你需要将
path/to/your/html/file.html
替换为实际的 HTML 文件路径。 -
使用
ProcessBuilder
构建wkhtmltopdf
命令,传递 HTML 文件路径和 PDF 文件路径作为参数。 -
调用
start()
方法启动进程,然后使用waitFor()
方法等待进程执行完毕。 -
根据进程的退出码判断 PDF 是否生成成功。
嘿,朋友,这两种方式都可以实现将 HTML 网页生成 PDF 的功能,你可以根据自己的需求和实际情况选择合适的方法。赶紧动手试试吧!