这是一个基于 Spring Boot 和 Thymeleaf 的 Java 后端 Demo,可以将 HTML 转换为 PDF 并将其保存在本地。

首先,你需要添加以下依赖项到你的 pom.xml 文件中:

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

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

    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itextpdf</artifactId>
        <version>5.5.13</version>
    </dependency>

    <dependency>
        <groupId>org.xhtmlrenderer</groupId>
        <artifactId>flying-saucer-pdf</artifactId>
        <version>9.1.20</version>
    </dependency>
</dependencies>

在你的应用程序中,创建一个 Controller 类:

import com.itextpdf.text.Document;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.PdfWriter;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.xhtmlrenderer.pdf.ITextRenderer;

import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

@Controller
public class HtmlToPdfController {

    @GetMapping("/pdf")
    @ResponseBody
    public void generatePdfFromHtml(@RequestParam("url") String url, HttpServletResponse response) {
        try {
            String fileName = "output.pdf";
            response.setContentType("application/pdf");
            response.setHeader("Content-disposition", "attachment; filename=" + fileName);

            Document document = new Document(PageSize.A4);
            OutputStream os = response.getOutputStream();
            PdfWriter.getInstance(document, os);
            document.open();

            ITextRenderer renderer = new ITextRenderer();
            renderer.setDocument(url);
            renderer.layout();
            renderer.createPDF(os);

            document.close();

        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

在这个 Controller 中,我们创建了一个名为 generatePdfFromHtml 的 GET 请求处理方法,它将 HTML 的 URL 作为参数传递。在这个方法中,我们设置了响应类型为 PDF,并将 PDF 保存到输出流中。

我们使用 iText 和 Flying Saucer 来转换 HTML 到 PDF。首先,我们创建一个 iText 的 Document 对象,并将输出流传递给 PdfWriter 对象。然后,我们创建一个 ITextRenderer 对象,并将 HTML 的 URL 传递给它。我们调用 layout() 方法来计算每个元素的位置和大小,然后调用 createPDF() 方法将 HTML 转换为 PDF。最后,我们关闭文档。

要测试这个 Demo,你可以使用以下代码:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>HTML to PDF Demo</title>
</head>
<body>
    <h1>HTML to PDF Demo</h1>
    <p>Click the button to download the PDF.</p>
    <button onclick="downloadPdf()">Download PDF</button>
    <script>
        function downloadPdf() {
            window.location.href = "/pdf?url=" + encodeURIComponent(window.location.href);
        }
    </script>
</body>
</html>

注意,在这个示例中,我们使用 JavaScript 来调用后端 API 并下载 PDF 文件。你需要将 /pdf 端点替换为你的实际端点。

当你点击下载按钮时,你将会看到一个新的 PDF 文件被下载到你的本地文件系统中。

Java Spring Boot 后端 Demo:将 HTML 转换为 PDF 并保存到本地

原文地址: https://www.cveoy.top/t/topic/mW1t 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录