springboot如何给本地的pdf文件添加上指定的水印保存为一个新的文件到指定的路径
时间: 2024-09-18 22:07:50 浏览: 32
在Spring Boot项目中,我们可以使用一些PDF处理库如iText、Apache PDFBox或者Flying Saucer等来给本地PDF文件添加水印并保存为新的文件。这里以Apache PDFBox为例说明:
首先,你需要在你的项目中添加PDFBox依赖,如果你还没有,可以在pom.xml中加入:
```xml
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>最新版本号</version>
</dependency>
```
接下来,你可以创建一个服务类,例如`PdfWatermarkService.java`,编写添加水印的方法:
```java
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
public class PdfWatermarkService {
private static final String WATERMARK_TEXT = "Your Watermark Text";
public void addWatermarkToPdf(String sourceFilePath, String destinationFilePath) throws IOException {
PDDocument document = PDDocument.load(new File(sourceFilePath));
// 创建PDFTextStripper以便获取原始内容
PDFTextStripper pdfStripper = new PDFTextStripper();
String text = pdfStripper.getText(document);
// 添加水印文本
int yPosition = document.getNumberOfPages() * 75 + 75; // 水印位置,可以根据需要调整
float fontSize = 40f; // 字体大小,可以调整
Font font = new Font(Font.FontFamily.HELVETICA_BOLD, fontSize, BaseFont.CP1252); // 字体选择
try (Graphics2D graphics = document.createGraphics()) {
graphics.setPaint(Color.LIGHT_GRAY);
graphics.setFont(font);
graphics.drawString(WATERMARK_TEXT, 50, yPosition);
}
// 将水印后的PDF保存到新文件
try (OutputStream outStream = new FileOutputStream(destinationFilePath)) {
document.save(outStream);
} finally {
if (document.isOpen()) {
document.close();
}
}
}
}
```
然后,在你的Controller中,你可以像下面这样调用这个服务:
```java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.io.File;
import java.io.FileOutputStream;
@Autowired
private PdfWatermarkService watermarkService;
@PostMapping("/add-watermark")
public ResponseEntity<String> addWatermark(@RequestParam("sourceFile") MultipartFile sourceFile,
@RequestParam("destinationPath") String destinationPath) {
try {
File source = new File(sourceFile.getOriginalFilename());
File dest = new File(destinationPath);
watermarkService.addWatermarkToPdf(source.getAbsolutePath(), dest.getAbsolutePath());
return ResponseEntity.ok("水印已成功添加到PDF");
} catch (IOException e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());
}
}
```
这个例子假设你已经有了一个上传文件的表单,`MultipartFile sourceFile`接收源PDF文件,`destinationPath`是一个用于存储新文件的URL。