在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各有其特点与使用场景。在选择库时,可以根据项目需求、复杂度以及报表内容的丰富程度进行选择。在实现具体功能的过程中,建议根据实际情况深入学习所选库的更多功能与特性。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部