一、在pom文件中引入对应的包:
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.4.3</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
二、添加java代码
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.util.UUID;
import com.itextpdf.text.Element;
import com.itextpdf.text.Image;
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;
public class WaterPrintUtil {
public static void setWaterPrint(BufferedOutputStream bos, String inputPDFFilePath, String contentText)
throws Exception {
PdfReader reader = new PdfReader(inputPDFFilePath);
PdfStamper stamper = new PdfStamper(reader, bos);
int total = reader.getNumberOfPages() + 1;
PdfContentByte content;
BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);
PdfGState gs = new PdfGState();
for (int i = 1; i < total; i++) {
//content = stamper.getOverContent(i);// 在内容上方加水印
content = stamper.getUnderContent(i);//在内容下方加水印
gs.setFillOpacity(0.2f);
content.beginText();
//字体大小
content.setFontAndSize(base, 9);
//content.setTextMatrix(70, 200);
//内容居中,横纵坐标,偏移量
content.showTextAligned(Element.ALIGN_CENTER, contentText, 390, 810, 0);
//添加图片
Image image = Image.getInstance("D:\\测试图片.jpg");
/*
img.setAlignment(Image.LEFT | Image.TEXTWRAP);
img.setBorder(Image.BOX); img.setBorderWidth(10);
img.setBorderColor(BaseColor.WHITE); img.scaleToFit(100072);//大小
img.setRotationDegrees(-30);//旋转
*/
//图片的位置(坐标)
image.setAbsolutePosition(520, 786);
// image of the absolute
image.scaleToFit(200, 200);
image.scalePercent(15);//依照比例缩放
content.addImage(image);
content.setFontAndSize(base, 8);
content.endText();
}
stamper.close();
//关闭打开的原来PDF文件,不执行reader.close()删除不了(必须先执行stamper.close(),否则会报错)
reader.close();
//删除原来的PDF文件
File targetTemplePDF = new File(inputPDFFilePath);
targetTemplePDF.delete();
}
public static void main(String[] args) throws Exception {
// 要输出的pdf文件
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File("D:\\测试PDF01.pdf")));
// 将pdf文件先加水印然后输出
setQRCodeWater(bos, "D:\\测试PDF.pdf", "添加的文字内容");
}
}
因项目只需保留添加完水印的pdf文件,所以在代码中有将原来的pdf文件删除。
注意:输入输出的文件不能是同一个文件,否则会报错。
在引入itextpdf包的时候有出现版本冲突的情况,原本引入的是5.5.13的版本,后改为5.4.3的版本,对应的bcprov包为:
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.48</version>
</dependency>