实现 Spring Boot + wkhtmltopdf 的步骤

1. 下载并安装 wkhtmltopdf

首先,我们需要下载并安装 wkhtmltopdf 工具,它可以将 HTML 转换成 PDF 文件。你可以在官方网站 [ 上找到适用于你操作系统的安装文件,并按照安装指南完成安装。

2. 创建 Spring Boot 项目

接下来,我们需要创建一个 Spring Boot 项目。你可以使用 IDE(如 IntelliJ IDEA 或 Eclipse)来创建一个新的 Spring Boot 项目,或者使用以下 Maven 命令创建一个简单的 Spring Boot 项目:

<groupId>com.example</groupId>
<artifactId>spring-boot-wkhtmltopdf-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-boot-wkhtmltopdf-demo</name>
<description>Demo project for Spring Boot and wkhtmltopdf</description>

<properties>
    <java.version>1.8</java.version>
    <spring-boot.version>2.4.2</spring-boot.version>
    <wkhtmltopdf.version>0.12.5</wkhtmltopdf.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

3. 引入 wkhtmltopdf 依赖

在项目的 pom.xml 文件中,我们需要引入 wkhtmltopdf 的依赖。在 <dependencies> 标签中加入以下代码:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-process</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
</dependency>

4. 创建 HTML 模板文件

src/main/resources/templates 目录下创建一个名为 template.html 的 HTML 模板文件,用于生成 PDF。你可以在该文件中编写你想要转换为 PDF 的 HTML 内容。

5. 创建 Controller

在项目中创建一个名为 PdfController 的类,并添加以下代码:

import org.springframework.core.io.InputStreamResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

@Controller
public class PdfController {

    @GetMapping("/pdf")
    public ResponseEntity<InputStreamResource> generatePdf() throws IOException {
        // 调用 wkhtmltopdf 命令将 HTML 转换成 PDF
        ProcessBuilder processBuilder = new ProcessBuilder("wkhtmltopdf", "http://localhost:8080/template.html", "-");
        processBuilder.redirectErrorStream(true);
        Process process = processBuilder.start();

        // 从 Process 的输出流中获取 PDF 内容
        InputStreamResource inputStreamResource = new InputStreamResource(process.getInputStream());

        // 设置响应头
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_PDF);
        headers.setContentDispositionFormData("attachment", "output.pdf");

        // 返回 ResponseEntity 包含 PDF 文件流和响应头
        return ResponseEntity.ok()
                .headers(headers)
                .body(inputStreamResource);
    }
}

6. 运行项目并测试

现在,我们可以运行 Spring Boot 项目,并访问 /pdf 路径来生成 PDF 文件。使用以下命令启动项目:

mvn spring-boot:run

然后,打开浏览器并访问 http://localhost:8080/pdf,将会生成名为 output.pdf 的 PDF 文件。

至此,我们完成了 Spring Boot 与 wkhtmltopdf 的集成过程。

总结

通过以上步骤,我们成功地将 Spring Boot 和 wkhtmltopdf 工具集成在一起,实现了将 HTML 转换成 PDF 的功能。你可以按照上述步骤进行操作,并根据自己的需求进行定制和扩展。祝你顺利!