Spring Boot 简单预览PDF例子

目录

前言

一、引入依赖

二、使用步骤

[1.创建 Controller 处理 PDF 生成和预览](#1.创建 Controller 处理 PDF 生成和预览)

2.创建预览页面

总结



前言

使用 Spring Boot 创建一个生成 PDF 并进行预览的项目,你可以按以下步骤进行。我们将使用 Spring BootThymeleafiText 等技术来完成这个任务。


一、引入依赖

XML 复制代码
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    
    <groupId>com.example</groupId>
    <artifactId>pdf-preview</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>pdf-preview</name>
    <description>Spring Boot PDF Preview</description>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <dependencies>
        <!-- Spring Boot Starter Web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- Spring Boot Starter Thymeleaf -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

        <!-- iText PDF Library for PDF generation -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext7-core</artifactId>
            <version>7.2.6</version>
            <type>pom</type>
        </dependency>

        <!-- Spring Boot Starter Test (for unit tests) -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

二、使用步骤

1.创建 Controller 处理 PDF 生成和预览

java 复制代码
package com.example.pdfpreview;

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.core.io.InputStreamResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

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

@Controller
public class PdfController {

    @GetMapping("/generate-pdf/{text}")
    public ResponseEntity<InputStreamResource> generatePdf(@PathVariable String text) throws IOException {
        // Step 1: Create a PDF document
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        PdfWriter writer = new PdfWriter(byteArrayOutputStream);
        PdfDocument pdfDocument = new PdfDocument(writer);
        Document document = new Document(pdfDocument);
        document.add(new Paragraph(text));

        // Close document to finish writing
        document.close();

        // Step 2: Prepare the response as a downloadable PDF
        InputStreamResource resource = new InputStreamResource(byteArrayOutputStream.toInputStream());
        return ResponseEntity.ok()
                .header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=generated.pdf")
                .contentType(org.springframework.http.MediaType.APPLICATION_PDF)
                .contentLength(byteArrayOutputStream.size())
                .body(resource);
    }

    @GetMapping("/preview-pdf")
    public String previewPdf(Model model) {
        // This page can be used for simple preview before generating the PDF
        model.addAttribute("previewText", "Hello, this is a sample preview text for your PDF!");
        return "preview";
    }
}

2.创建预览页面

src/main/resources/templates 目录下创建一个名为 preview.html 的 Thymeleaf 页面

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>PDF Preview</title>
</head>
<body>
    <h1>PDF Preview</h1>
    <p>Preview Text: <strong th:text="${previewText}"></strong></p>
    <form action="/generate-pdf/{text}" method="get">
        <input type="text" name="text" value="Hello, World!" />
        <button type="submit">Generate PDF</button>
    </form>
</body>
</html>

总结

相关推荐
钱多多_qdd2 分钟前
spring cache源码解析(四)——从@EnableCaching开始来阅读源码
java·spring boot·spring
waicsdn_haha4 分钟前
Java/JDK下载、安装及环境配置超详细教程【Windows10、macOS和Linux图文详解】
java·运维·服务器·开发语言·windows·后端·jdk
飞的肖12 分钟前
前端使用 Element Plus架构vue3.0实现图片拖拉拽,后等比压缩,上传到Spring Boot后端
前端·spring boot·架构
Q_192849990614 分钟前
基于Spring Boot的摄影器材租赁回收系统
java·spring boot·后端
良许Linux19 分钟前
0.96寸OLED显示屏详解
linux·服务器·后端·互联网
求知若饥31 分钟前
NestJS 项目实战-权限管理系统开发(六)
后端·node.js·nestjs
gb42152871 小时前
springboot中Jackson库和jsonpath库的区别和联系。
java·spring boot·后端
程序猿进阶1 小时前
深入解析 Spring WebFlux:原理与应用
java·开发语言·后端·spring·面试·架构·springboot
颜淡慕潇2 小时前
【K8S问题系列 |19 】如何解决 Pod 无法挂载 PVC问题
后端·云原生·容器·kubernetes