Java 生成 PDF 并返回给前端的实现方法

在Web开发中,经常需要将数据以PDF格式展示给用户,比如报表、发票、证书等。Java作为一门强大的后端语言,提供了多种生成PDF的库,如iText、Apache PDFBox等。本文将介绍如何使用Java生成PDF,并将其作为响应返回给前端。

环境准备

首先,确保你的项目中已经添加了生成PDF所需的库。以iText为例,你可以在项目的pom.xml中添加如下依赖:

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

编写生成PDF的代码

接下来,我们将编写一个简单的Java方法,用于生成包含文本的PDF文档。

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;

import java.io.ByteArrayOutputStream;
import java.io.IOException;

public class PDFGenerator {
    public ByteArrayOutputStream generatePDF(String content) throws DocumentException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        Document document = new Document();
        PdfWriter.getInstance(document, baos);
        document.open();
        document.add(new Paragraph(content));
        document.close();
        return baos;
    }
}

将PDF作为响应返回给前端

在Spring Boot等现代Java Web框架中,我们可以通过设置响应的Content-Typeapplication/pdf,并将PDF内容写入响应体来实现。

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;

@RestController
public class PDFController {

    private final PDFGenerator pdfGenerator = new PDFGenerator();

    @GetMapping("/pdf")
    public void generatePDF(HttpServletResponse response) throws IOException, DocumentException {
        response.setContentType("application/pdf");
        response.setHeader("Content-Disposition", "inline; filename=example.pdf");

        ByteArrayOutputStream baos = pdfGenerator.generatePDF("Hello, PDF!");
        response.getOutputStream().write(baos.toByteArray());
    }
}

序列图

使用Mermaid语法,我们可以绘制一个简单的序列图,描述前端请求PDF的过程。

sequenceDiagram
    participant User as U
    participant Frontend as F
    participant Backend as B

    U->>F: 请求PDF
    F->>B: 发送GET请求到 /pdf
    B->>B: 调用PDFGenerator.generatePDF
    B->>F: 返回PDF内容
    F->>U: 展示PDF

饼状图

为了形象展示PDF生成过程中各步骤所占的时间比例,我们可以使用Mermaid语法绘制一个饼状图。

pie
    title PDF生成时间分布
    "PDF内容生成" : 40
    "设置响应头" : 20
    "写入响应体" : 30
    "其他" : 10

结语

通过本文的介绍,你应该已经了解了如何在Java后端生成PDF,并将其作为响应返回给前端。这在许多实际应用场景中都非常有用,比如在线文档预览、报表下载等。当然,生成PDF的方法和库有很多,你可以根据项目需求选择合适的工具。希望本文对你有所帮助!