详情参考这篇博文:https://blog.csdn.net/zxl782340680/article/details/106768820
1、引入pom.xml
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
2、代码并测试
package com.cyk.project.controller;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfGState;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.FileOutputStream;
@Slf4j
public class PdfController {
public static String addImgWaterMaker() {
String inputFile="D:/春江花月夜.pdf";
String outputFile="D:/春江花月夜-添加水印后.pdf";
String imgFilePath="D:/水印.jpg";
log.debug("==========addImgWaterMaker==========start");
try {
PdfReader reader = new PdfReader(inputFile);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outputFile));
PdfGState gs1 = new PdfGState();
// 设置透明度
gs1.setFillOpacity(1f);
Image image = Image.getInstance(imgFilePath);
// 获取PDF页数
int num = reader.getNumberOfPages();
PdfContentByte under;
for (int i = 1; i <= num; i++) {
PdfContentByte pdfContentByte = stamper.getOverContent(i);
// 设置透明度
pdfContentByte.setGState(gs1);
// 设置等比缩放
image.scaleToFit(100,100);
image.setAbsolutePosition(400 , 750 );
pdfContentByte.addImage(image);
}
stamper.close();
reader.close();
log.debug("==========addImgWaterMaker==========end");
} catch (Exception e) {
e.printStackTrace();
log.error("文件{}增加水印异常:{}",inputFile,e.getMessage());
return inputFile;
}
return outputFile;
}
public static void main(String[] args) {
addImgWaterMaker();
}
}