Java Spring Boot 后端 Demo:将 HTML 转换为 PDF 并保存到本地
这是一个基于 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 文件被下载到你的本地文件系统中。
原文地址: https://www.cveoy.top/t/topic/mW1t 著作权归作者所有。请勿转载和采集!