一、在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 absoluteimage.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>