效果:
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
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 org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.FileOutputStream;
import java.io.IOException;
/***
* PDF水印工具类
*/
public class PDFWatermarkUtil {
private static final Logger LOGGER = LoggerFactory.getLogger(PDFWatermarkUtil.class);
/***
* 执行添加图片水印
* @param inputFilePath 原始文件
* @param outputFilePath 添加水印文件
* @param watermarkPath 水印图片
*/
public static boolean addWatermark(String inputFilePath, String outputFilePath, String watermarkPath) {
FileOutputStream fileOutputStream = null;
try {
// 待加水印的文件
PdfReader pdfReader = new PdfReader(inputFilePath);
fileOutputStream = new FileOutputStream(outputFilePath);
// 加完水印的文件
PdfStamper pdfStamper = new PdfStamper(pdfReader, fileOutputStream);
int total = pdfReader.getNumberOfPages() + 1;
//设置透明度
PdfGState gs = new PdfGState();
gs.setFillOpacity(0.3f);
Image image = Image.getInstance(watermarkPath);
//循环对每页插入水印
for (int i = 1; i < total; i++) {
PdfContentByte pdfContentByte = pdfStamper.getOverContent(i);
pdfContentByte.setGState(gs);
image.setAbsolutePosition(0, 0);
pdfContentByte.addImage(image);
}
pdfStamper.close();
pdfReader.close();
} catch (Exception e) {
LOGGER.error("executeWatermark exception", e);
return false;
}finally {
try {
if(fileOutputStream != null){
fileOutputStream.flush();
fileOutputStream.close();
}
} catch (IOException e) {
LOGGER.error("fileOutputStream close exception", e);
}
}
return true;
}
}
public class Test {
public static void main(String[] args) {
String inputFilePath = "E:\\pdftest\\pdf_20230222113345_content.pdf";
String outputFilePath = "E:\\pdftest\\out.pdf";
String watermarkPath = "E:\\imge\\922D3841-7962-4CB2-BFCA-42677E03AAB5.png";
PDFWatermarkUtil.addWatermark(inputFilePath,outputFilePath,watermarkPath);
}
}