Maven依赖:
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.9</version>
</dependency><dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
Java代码:
package com.daydayup.study001.watermark;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;import com.itextpdf.text.BaseColor;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfGState;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;/**
*
* 使用itextPdf给已经存在的PDF添加文字水印
* @author chengjiarong
*
*/
public class WatermarkForPdf {public static void main(String[] args) throws FileNotFoundException, IOException, DocumentException {
PdfReader reader = new PdfReader(WatermarkForPdf.class.getResource("/example.pdf"));
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("watermarked-2.pdf"));BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);
PdfContentByte under;
Rectangle pageRect = null;
for (int i = 0; i < reader.getNumberOfPages(); i++) {
pageRect = stamper.getReader().getPageSizeWithRotation(i);
float x = pageRect.getWidth() / 3 - 50;
float y = pageRect.getHeight() / 2 - 20;under = stamper.getOverContent(i);
under.saveState();
PdfGState gs = new PdfGState();
gs.setFillOpacity(0.3f);
under.setGState(gs);
under.beginText();
under.setFontAndSize(base, 45);
under.setColorFill(BaseColor.RED);
under.showTextAligned(Element.ALIGN_LEFT, "测试PDF水印 - Test PDF WaterMark", x, y, 45);
under.endText();
under.setLineWidth(1f);
under.stroke();
}
stamper.close();
reader.close();
}}