在Java Spring Boot应用中,生成PDF文件的方式有多种,常用的库包括Apache PDFBox、iText、JasperReports等。本文将介绍几种常见的生成PDF文件的方法,并提供相关代码示例。
1. 使用 iText 生成 PDF
iText 是一个功能强大的PDF处理库,支持创建和操作PDF文档,适合用在商业项目中。以下是使用iText创建简单PDF文档的示例代码。
依赖配置
首先,在pom.xml
中添加iText的依赖:
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext7-core</artifactId>
<version>7.1.16</version>
</dependency>
PDF生成示例
import com.itextpdf.io.font.constants.StandardFonts;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import org.springframework.stereotype.Service;
import java.io.File;
@Service
public class PdfService {
public void createPdf(String dest) {
try {
// 创建PDF Writer
PdfWriter writer = new PdfWriter(dest);
// 创建PDF Document
PdfDocument pdf = new PdfDocument(writer);
// 创建Document
Document document = new Document(pdf);
// 添加段落
document.add(new Paragraph("Hello World!").setFont(StandardFonts Helvetica));
// 关闭Document
document.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
在Controller中调用这个Service即可生成PDF:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class PdfController {
@Autowired
private PdfService pdfService;
@GetMapping("/generate-pdf")
public String generatePdf() {
String dest = "output/hello.pdf";
pdfService.createPdf(dest);
return "PDF生成成功!";
}
}
2. 使用 Apache PDFBox 生成 PDF
Apache PDFBox 是另一种流行的PDF库,提供简单的API来创建和操作PDF文件。
依赖配置
在pom.xml
中添加PDFBox的依赖:
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.24</version>
</dependency>
PDF生成示例
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import org.springframework.stereotype.Service;
import java.io.IOException;
@Service
public class PdfBoxService {
public void createPdf(String dest) {
try (PDDocument document = new PDDocument()) {
PDPage page = new PDPage();
document.addPage(page);
// 创建内容流
PDPageContentStream contentStream = new PDPageContentStream(document, page);
contentStream.beginText();
contentStream.setFont(PDType1Font.HELVETICA, 12);
contentStream.newLineAtOffset(100, 700);
contentStream.showText("Hello, PDFBox!");
contentStream.endText();
contentStream.close();
// 保存文档
document.save(dest);
} catch (IOException e) {
e.printStackTrace();
}
}
}
在PdfController
中同样可以调用PdfBoxService
来生成PDF。
3. 使用 JasperReports 生成 PDF
JasperReports 是一个非常强大的报告生成工具,适合生成复杂的报告和PDF文档。
依赖配置
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.20.0</version>
</dependency>
PDF生成示例
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import org.springframework.stereotype.Service;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@Service
public class JasperService {
public void generatePdf(String dest) {
try {
// 编译报告
JasperReport jasperReport = JasperCompileManager.compileReport("path/to/report.jrxml");
// 数据源
List<Data> dataList = new ArrayList<>();
// 假设有一些数据
Data data = new Data("样本数据");
dataList.add(data);
JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(dataList);
// 每个report可以用一个map存放parameters
HashMap<String, Object> parameters = new HashMap<>();
parameters.put("createdBy", "YOUR_NAME");
// 填充报告
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, dataSource);
// 导出PDF
JasperExportManager.exportReportToPdfFile(jasperPrint, dest);
} catch (JRException e) {
e.printStackTrace();
}
}
}
在Controller中调用JasperService
生成PDF报告。
总结
以上是几种在Java Spring Boot中生成PDF文件的常用方法,iText、PDFBox和JasperReports各有其特点与使用场景。在选择库时,可以根据项目需求、复杂度以及报表内容的丰富程度进行选择。在实现具体功能的过程中,建议根据实际情况深入学习所选库的更多功能与特性。