maven依赖:
<!-- https://mvnrepository.com/artifact/com.itextpdf/itext-asian -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>5.5.10</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.4.3</version>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.7</version>
</dependency>
源码:
package fileTest;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.*;
import java.io.FileOutputStream;
import java.io.IOException;
public class pdfPrint {
/**
* @param inputFile 原文件路径
* @param outputFile 水印文件路径
* @Param waterMarkName 水印内容
*/
public static boolean setWater (String inputFile, String outputFile, String waterMarkName) throws Exception {
/* PdfReader pdfReader = new PdfReader("D:/测试项目/TFT-LCD.pdf");
// Get the PdfStamper object
PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileOutputStream("f:/22.pdf"));
addWatermark(pdfStamper, "HK RUISKY");*/
PdfReader pdfReader = new PdfReader(inputFile);
// Get the PdfStamper object
PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileOutputStream(outputFile));
boolean result = addWatermark(pdfStamper, waterMarkName);
pdfStamper.close();
if (result) {
return true;
}else {
return false;
}
}
private static boolean addWatermark(PdfStamper pdfStamper, String waterMarkName) {
boolean flag = false;
PdfContentByte content = null;
BaseFont base = null;
Rectangle pageRect = null;
PdfGState gs = new PdfGState();
try {
// 设置字体
base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.EMBEDDED);
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
if (base == null || pdfStamper == null) {
return flag;
}
// 设置透明度为0.4
gs.setFillOpacity(0.4f);
gs.setStrokeOpacity(0.4f);
int toPage = pdfStamper.getReader().getNumberOfPages();
for (int i = 1; i <= toPage; i++) {
pageRect = pdfStamper.getReader().getPageSizeWithRotation(i);
// 计算水印X,Y坐标
float x = pageRect.getWidth() / 2;
float y = pageRect.getHeight() / 2;
//获得PDF最顶层
content = pdfStamper.getOverContent(i);
content.saveState();
// set Transparency
content.setGState(gs);
content.beginText();
// content.setColorFill(Color.GRAY);
content.setFontAndSize(base, 80);
// 水印文字成45度角倾斜
content.showTextAligned(Element.ALIGN_CENTER, waterMarkName, x,y, 315);
content.endText();
flag = true;
}
} catch (Exception ex) {
flag = false;
ex.printStackTrace();
} finally {
content = null;
base = null;
pageRect = null;
}
return flag;
}
public static void main(String args[]){
String filePath="E:\\京维营业收费系统缴费接口文档.pdf";
String outFile="E:\\京维营业收费系统缴费接口文档1.pdf";
try {
if(setWater(filePath,outFile,"中国农业银行青海农行")){
System.out.println("水印添加成功!");
}else {
System.out.println("水印添加失败!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}