<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.12</version>
</dependency>
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType0Font;
import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState;
import org.apache.pdfbox.util.Matrix;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.ClassPathResource;
import java.awt.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URL;
public class PdfUtil {
private static Logger log = LoggerFactory.getLogger(PdfUtil.class);
private static float fontSize=13;
private static int[] color={0,200,0};
private static int rowSpace=150;
private static int colSpace=150;
public static void main(String[] args) {
String readPdfUrl ="C:\Users\Administrator\Desktop\a.pdf";
String outPdfUrl ="C:\Users\Administrator\Desktop\b.pdf";
String waterMark="2022-08-19 孔繁浩";
try{
PdfUtil util = new PdfUtil();
String url = util.pdfWaterMark(readPdfUrl, outPdfUrl, waterMark);
System.err.println(url);
}catch (Exception e){
log.debug("为PDF文件添加水印失败:{}",e);
}
}
public String pdfWaterMark(String readPdfUrl,String outPdfUrl,String waterMark) throws Exception{
File file = new File(readPdfUrl);
PDDocument document = PDDocument.load(file);
document.setAllSecurityToBeRemoved(true);
for (PDPage page : document.getPages()) {
PDPageContentStream stream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true, true);
ClassPathResource resource = new ClassPathResource("/fonts/pdf.ttf");
InputStream inputStream = resource.getInputStream();
PDFont font = PDType0Font.load(document, inputStream, true);
PDExtendedGraphicsState r = new PDExtendedGraphicsState();
r.setNonStrokingAlphaConstant(0.2f);
r.setAlphaSourceFlag(true);
stream.setGraphicsStateParameters(r);
stream.setStrokingColor(Color.lightGray);
stream.beginText();
stream.setFont(font, fontSize);
stream.newLineAtOffset(0, -15);
float pageHeight = page.getMediaBox().getHeight();
float pageWidth = page.getMediaBox().getWidth();
for (int h = 10; h < pageHeight; h = h + rowSpace) {
for (int w = - 10; w < pageWidth; w = w + colSpace) {
stream.setTextMatrix(Matrix.getRotateInstance(0.3, w, h));
stream.showText(waterMark);
}
}
stream.endText();
stream.restoreGraphicsState();
stream.close();
}
document.save(outPdfUrl);
return outPdfUrl;
}
}