简介
PDF(Portable Document Format)是一种非常常见的文档格式,它的特点是跨平台、可读性强和具有丰富的排版样式和图表。在实际应用中,我们经常需要对 PDF 进行一些操作,例如添加水印。本篇博客将介绍如何使用 Spring Boot 实现 PDF 水印的功能。
准备工作
在开始之前,我们需要准备以下的环境:
- 安装 JDK,并配置相关环境变量
- 安装 Maven(或其他构建工具)
- 安装 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 文件添加水印,满足实际应用的需求。希望本篇博客对您有所帮助!
参考链接
本文来自极简博客,作者:美食旅行家,转载请注明原文链接:Spring Boot 实现 PDF 水印