itext向PDF新增文字圖片水印
阿新 • • 發佈:2022-06-01
Maven座標
<properties> <itextpdf.version>5.5.6</itextpdf.version> </properties> <dependencies> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>${itextpdf.version}</version> </dependency> <dependency> <groupId>com.itextpdf.tool</groupId> <artifactId>xmlworker</artifactId> <version>${itextpdf.version}</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.2.0</version> </dependency> </dependencies>
程式碼
/** * PDF加圖片水印 * @param pdfInPath 原始檔(PDF) * @param imgPath 圖片檔案(水印) * @param pdfOutPath 目標輸出檔案(PDF) * @throws IOException * @throws DocumentException */ public static void setImgWatermark(String pdfInPath,String imgPath,String pdfOutPath) throws IOException, DocumentException { FileOutputStream fos = new FileOutputStream(pdfOutPath); BufferedOutputStream bos = new BufferedOutputStream(fos); PdfReader reader = new PdfReader(pdfInPath); PdfStamper stamper = new PdfStamper(reader, bos); int total = reader.getNumberOfPages() + 1; PdfContentByte waterMar; PdfGState gs = new PdfGState(); for (int i = 1; i < total; i++) { waterMar = stamper.getOverContent(i);// 在內容上方加水印 //waterMar = stamper.getUnderContent(1);//在內容下方加水印 // 設定圖片透明度為0.8f gs.setFillOpacity(0.8f); // 設定透明度 waterMar.setGState(gs); // 建立水印圖片 Image image = Image.getInstance(imgPath); // 水印圖片位置 image.setAbsolutePosition(850, 80); // 邊框固定 image.scaleToFit(200, 200); // 設定旋轉弧度 //image.setRotation(30);// 旋轉 弧度 // 設定旋轉角度 //image.setRotationDegrees(45);// 旋轉 角度 // 設定等比縮放 image.scalePercent(150); // 自定義大小 image.scaleAbsolute(100,100); // 附件加上水印圖片 waterMar.addImage(image); // stroke waterMar.stroke(); } stamper.close(); reader.close(); } /** * PDF新增文字水印 * @param srcFile 原始檔(PDF) * @param outSrcPath 目標輸出檔案(PDF) * @param watermarktext 水印(文字) * @throws IOException * @throws DocumentException */ public static void addWatermark(String srcFile,String outSrcPath, String watermarktext) throws IOException, DocumentException { // 待加水印的檔案 PdfReader reader = new PdfReader(new FileInputStream(srcFile)); if(outSrcPath == null || outSrcPath.trim().equals("")){ outSrcPath = "D:\\waterMark.pdf"; } // 加完水印的檔案 PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outSrcPath)); // 設定字型 BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED); // 設定透明度 PdfGState gs = new PdfGState(); // pdf頁數 int pageCount = reader.getNumberOfPages() + 1; PdfContentByte content; // 迴圈對每頁插入水印 for (int i = 1; i < pageCount; i++) { // 水印的起始 content = stamper.getOverContent(i); gs.setFillOpacity(0.5f); content.setGState(gs); // 開始 content.beginText(); // 設定顏色 預設為黑色 content.setColorFill(BaseColor.LIGHT_GRAY); // 設定字型及字號 content.setFontAndSize(baseFont, 50); // 開始寫入水印 content.showTextAligned(Element.ALIGN_BASELINE, watermarktext, 180, 340, 45); content.endText(); } stamper.close(); reader.close(); }
呼叫
/*新增圖片水印*/ String filePath1 = realPath + "\\cer\\"+CommonTool.getCurrTimeForFile()+".pdf"; setImgWatermark(realPath + filepath,"C:\\Pictures\\qrcode.png",filePath1); /*新增文字水印*/ String filePath2 = realPath + "\\cer\\"+CommonTool.getCurrTimeForFile()+".pdf"; addWatermark(filePath1,filePath2,"這是一個水印");
效果如下