Spring Boot 实现 PDF 水印

美食旅行家 2024-03-09 ⋅ 27 阅读

简介

PDF(Portable Document Format)是一种非常常见的文档格式,它的特点是跨平台、可读性强和具有丰富的排版样式和图表。在实际应用中,我们经常需要对 PDF 进行一些操作,例如添加水印。本篇博客将介绍如何使用 Spring Boot 实现 PDF 水印的功能。

准备工作

在开始之前,我们需要准备以下的环境:

  1. 安装 JDK,并配置相关环境变量
  2. 安装 Maven(或其他构建工具)
  3. 安装 IntelliJ IDEA(或其他集成开发环境)

导入依赖

首先,我们需要在项目的 pom.xml 文件中导入相关依赖:

<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.25</version>
</dependency>

以上依赖是用于操作 PDF 的核心库。我们使用的是 Apache PDFBox,它是一个开源的 Java 库,提供了丰富的功能,能够满足我们添加水印的需求。

编写代码

添加水印接口

首先,我们需要创建一个接口,用于添加水印到 PDF 文件。在项目的 src/main/java/com/example/demo/controller 目录下创建 WatermarkController.java 文件,并添加以下代码:

@RestController
@RequestMapping("/watermark")
public class WatermarkController {

    @PostMapping("/add")
    public ResponseEntity<byte[]> addWatermark(@RequestParam("file") MultipartFile file, @RequestParam("text") String text) {
        try {
            File pdfFile = convertMultipartFileToFile(file);

            PDDocument document = PDDocument.load(pdfFile);

            for (PDPage page : document.getPages()) {
                PDPageContentStream contentStream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true, true);
                contentStream.setFont(PDType1Font.HELVETICA_BOLD, 40);
                contentStream.setLeading(12);
                contentStream.beginText();
                contentStream.newLineAtOffset(50, 600);
                contentStream.showText(text);
                contentStream.endText();
                contentStream.close();
            }

            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            document.save(byteArrayOutputStream);

            document.close();

            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.APPLICATION_PDF);
            headers.setContentDispositionFormData("attachment", "watermarked.pdf");
            return new ResponseEntity<>(byteArrayOutputStream.toByteArray(), headers, HttpStatus.OK);
        } catch (IOException e) {
            e.printStackTrace();
            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }

    private File convertMultipartFileToFile(MultipartFile file) throws IOException {
        File convertedFile = new File(file.getOriginalFilename());
        file.transferTo(convertedFile);
        return convertedFile;
    }
}

上述代码中,我们使用 PDDocument 类打开 PDF 文件,并使用 PDPageContentStream 类将水印文字添加到每一页。最后,将修改后的 PDF 内容保存到字节数组 byteArrayOutputStream 中,并设置响应头为 PDF 格式,以附件形式返回给前端。

配置文件上传

为了实现文件上传功能,我们需要在 application.properties 文件中添加以下配置:

spring.servlet.multipart.enabled=true
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB

上述配置可以根据实际需求进行调整。

编写前端界面

在项目的 src/main/resources/templates 目录下创建一个名为 index.html 的文件,并添加以下代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>PDF Watermark</title>
</head>
<body>
    <h1>PDF Watermark</h1>
    <form action="/watermark/add" method="post" enctype="multipart/form-data">
        <input type="file" name="file" required>
        <br><br>
        <input type="text" name="text" placeholder="Watermark Text" required>
        <br><br>
        <button type="submit">Add Watermark</button>
    </form>
</body>
</html>

上述代码是一个简单的表单界面,用户可以选择要添加水印的 PDF 文件,并输入水印的文字。点击按钮后,将提交表单数据到 /watermark/add 接口进行处理。

运行项目

完成上述代码编写后,我们可以使用以下命令运行项目:

mvn spring-boot:run

项目启动后,使用浏览器访问 http://localhost:8080,即可看到上传表单界面。选择要添加水印的 PDF 文件,并输入水印文字,点击按钮后,会自动下载名为 watermarked.pdf 的文件,该文件即为添加水印后的 PDF 文档。

总结

本篇博客介绍了如何使用 Spring Boot 实现 PDF 水印的功能。通过简单的代码编写和配置,我们可以方便地向 PDF 文件添加水印,满足实际应用的需求。希望本篇博客对您有所帮助!

参考链接


全部评论: 0

    我有话说: