网站首页 > 技术文章 正文
如果你想要在Spring Boot项目中使用OpenPDF来生成PDF文件,而不是iText,你可以通过将HTML转换成PDF的方式来实现。OpenPDF是一个开源的Java PDF库,它基于iText 5.x版本,但是它主要提供了HTML到PDF的转换能力。
下面是如何在Spring Boot项目中设置并使用OpenPDF来生成PDF文件的一个简单教程。
1. 引言
PDF文件因其跨平台兼容性和格式的稳定性而在商业文档中广泛使用。使用Spring Boot集成OpenPDF库可以方便地将HTML、JSON或其他数据源转换为PDF格式,以供下载或打印。
2. 准备工作
2.1 添加依赖
首先,在你的pom.xml文件中添加OpenPDF的依赖:
Xml
深色版本
1<dependency>
2 <groupId>com.github.openpdf</groupId>
3 <artifactId>openpdf</artifactId>
4 <version>1.3.14</version>
5</dependency>
2.2 创建实体类
假设我们有一个简单的Invoice实体类,用于存储发票信息:
Java
深色版本
1import java.time.LocalDate;
2
3public class Invoice {
4
5 private String invoiceNumber;
6 private LocalDate issueDate;
7 private String customerName;
8 private double totalAmount;
9
10 // 构造器、getter和setter...
11
12 public Invoice(String invoiceNumber, LocalDate issueDate, String customerName, double totalAmount) {
13 this.invoiceNumber = invoiceNumber;
14 this.issueDate = issueDate;
15 this.customerName = customerName;
16 this.totalAmount = totalAmount;
17 }
18
19 // Getter and setter methods...
20}
3. 创建HTML模板
为了将数据转换为PDF文件,我们需要创建一个HTML模板,该模板定义了PDF文件的样式和布局。
Html
深色版本
1<!DOCTYPE html>
2<html>
3<head>
4 <style>
5 body { font-family: Arial; }
6 table { width: 100%; border-collapse: collapse; }
7 td, th { border: 1px solid #dddddd; text-align: left; padding: 8px; }
8 </style>
9</head>
10<body>
11 <h2>Invoice</h2>
12 <table>
13 <tr>
14 <th>Invoice Number:</th>
15 <td>${invoiceNumber}</td>
16 </tr>
17 <tr>
18 <th>Issue Date:</th>
19 <td>${issueDate}</td>
20 </tr>
21 <tr>
22 <th>Customer Name:</th>
23 <td>${customerName}</td>
24 </tr>
25 <tr>
26 <th>Total Amount:</th>
27 <td>${totalAmount}</td>
28 </tr>
29 </table>
30</body>
31</html>
4. 使用OpenPDF生成PDF
接下来,我们需要编写一个控制器方法,该方法读取HTML模板,填充数据,并将其转换为PDF文件。
Java
深色版本
1import com.lowagie.text.Document;
2import com.lowagie.text.pdf.PdfWriter;
3import com.lowagie.text.pdf.parser.PdfTextExtractor;
4import freemarker.template.Configuration;
5import freemarker.template.Template;
6import freemarker.template.TemplateException;
7import org.springframework.stereotype.Controller;
8import org.springframework.web.bind.annotation.GetMapping;
9import org.springframework.web.bind.annotation.ResponseBody;
10
11import javax.servlet.http.HttpServletResponse;
12import java.io.ByteArrayOutputStream;
13import java.io.IOException;
14import java.io.OutputStream;
15import java.io.StringWriter;
16import java.nio.charset.StandardCharsets;
17import java.util.HashMap;
18import java.util.Map;
19
20@Controller
21public class PdfController {
22
23 @GetMapping("/generate-pdf")
24 @ResponseBody
25 public void generatePdf(HttpServletResponse response) throws IOException, TemplateException {
26 // 设置HTTP响应头
27 response.setContentType("application/pdf");
28 response.setHeader("Content-Disposition", "attachment; filename=invoice.pdf");
29
30 // 创建Invoice实例
31 Invoice invoice = new Invoice("INV-123456", LocalDate.now(), "John Doe", 250.99);
32
33 // 使用FreeMarker处理HTML模板
34 Configuration cfg = new Configuration(Configuration.VERSION_2_3_30);
35 cfg.setClassForTemplateLoading(PdfController.class, "/templates/"); // 假设HTML模板位于/templates/目录下
36
37 Map<String, Object> data = new HashMap<>();
38 data.put("invoice", invoice);
39
40 Template template = cfg.getTemplate("invoice.html");
41 StringWriter stringWriter = new StringWriter();
42 template.process(data, stringWriter);
43
44 // 将HTML字符串转换为PDF
45 ByteArrayOutputStream pdfBytes = new ByteArrayOutputStream();
46 try (Document document = new Document()) {
47 PdfWriter.getInstance(document, pdfBytes);
48 document.open();
49 com.lowagie.text.html.HtmlWriter.getInstance(document, pdfBytes);
50 com.lowagie.text.html.simpleparser.HTMLWorker htmlParser = new com.lowagie.text.html.simpleparser.HTMLWorker(document);
51 htmlParser.parse(new StringReader(stringWriter.toString()));
52 document.close();
53 }
54
55 // 输出PDF到浏览器
56 OutputStream out = response.getOutputStream();
57 out.write(pdfBytes.toByteArray());
58 out.flush();
59 out.close();
60 }
61}
在这个示例中,我们使用了Freemarker作为模板引擎来渲染HTML页面。如果你不使用Freemarker,你可以选择其他的模板引擎或者直接使用静态HTML文件。
注意事项
- 在实际生产环境中,你可能需要考虑更复杂的HTML布局以及CSS样式。
- 如果你需要支持中文等非英文字符,可能需要对字体进行额外配置。
- 以上代码片段只是一个基本的示例,你可能需要根据实际情况进行调整。
这样,当用户访问/generate-pdf URL时,他们将能够下载生成的PDF文件。
以上步骤展示了如何在Spring Boot中集成OpenPDF并生成PDF文件的基本流程。希望这可以帮助你快速上手!
如果你有任何问题或需要进一步的帮助,请随时提问。
本文档撰写于2024年7月25日。
参考资料
- OpenPDF GitHub Repository
猜你喜欢
- 2024-10-23 从腾讯T3-3大佬手上获得的Java架构进阶PDF文档,图文并茂,真香
- 2024-10-23 数据如何转成html表格、pdf、xmind文件格式下载?
- 2024-10-23 Java 给PDF文档设置有效时间 java pdfwriter
- 2024-10-23 Spire.PDF for Java 8.9.1 增强了 PDF 到 Excel 和 PDFA3A 的转换
- 2024-10-23 Java | 调用打印机打印PDF文件 java调用打印机打印pdf文件
- 2024-10-23 「更新指南」Aspose.PDF for Java v19.5全新上线 | 附下载
- 2024-10-23 Java添加条形码到PDF表格 条形码生成api
- 2024-10-23 Java pdf下载优化:Java图片压缩 java压缩pdf文件
- 2024-10-23 Spire.PDF for Java 8.10.1 增强了 PDF 到图片的转换
- 2024-10-23 iText7实现PDF电子签章 java pdf电子签章
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)