PDF添加二维码
package com.xuebusi.toutiao.admin.api.common.util; import com.itextpdf.text.BaseColor; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Element; import com.itextpdf.text.Image; import com.itextpdf.text.pdf.*; import java.io.*; public class WaterMarkUtils { /** * PDF附件添加二维码 * * @param bos 输出文件的位置 * @param input 输入文件流 * @author nicky.ma * @date 2019年6月11日下午3:42:15 */ public static void setQrCodeForPDF(BufferedOutputStream bos, InputStream input) { try { // 创建水印图片 BarcodeQRCode barcodeQRCode = new BarcodeQRCode("https://sina.cn", 100, 100, null); com.itextpdf.text.Image iTextImage = barcodeQRCode.getImage(); // 水印图片位置 iTextImage.setAbsolutePosition(10, 740); // 边框固定 // iTextImage.scaleToFit(200, 200); // 设置旋转弧度 //image.setRotation(30);// 旋转 弧度 // 设置旋转角度 // iTextImage.setRotationDegrees(45); // 设置等比缩放 iTextImage.scalePercent(80); // 自定义大小 iTextImage.scaleAbsolute(100, 100); //PDF附件加上二维码水印 setWatermarkForPDF(bos, input, iTextImage); } catch (IOException e) { e.printStackTrace(); } catch (DocumentException e) { e.printStackTrace(); } } /** * 为PDF附件添加图片水印 * * @param bos 输出文件的位置 * @param input 输入文件流 * @author nicky.ma * @date 2019/6/11 12:00:32 */ public static void setWatermarkForPDF(BufferedOutputStream bos, InputStream input, Image iTextImage) throws IOException, DocumentException { PdfReader reader = new PdfReader(input); PdfStamper stamper = new PdfStamper(reader, bos); int total = reader.getNumberOfPages() + 1; PdfContentByte waterMar; PdfGState gs = new PdfGState(); long startTime = System.currentTimeMillis(); System.out.println("PDF加图片水印 start"); for (int i = 1; i < total; i++) { // waterMar = stamper.getOverContent(i);// 在内容上方加水印 waterMar = stamper.getUnderContent(1);//在内容下方加水印 // 设置图片透明度为0.2f //gs.setFillOpacity(0.2f); // 设置笔触字体不透明度为0.4f //gs.setStrokeOpacity(0.4f); // 开始水印处理 waterMar.beginText(); // 设置透明度 waterMar.setGState(gs); // 设置水印字体参数及大小 BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED); waterMar.setFontAndSize(bf, 12); // 设置水印对齐方式 水印内容 X坐标 Y坐标 旋转角度 waterMar.showTextAligned(Element.ALIGN_CENTER, "存证证书", 60, 725, 0); // 设置水印颜色 waterMar.setColorFill(BaseColor.GRAY); // 附件加上水印图片 waterMar.addImage(iTextImage); // 完成水印添加 waterMar.endText(); // stroke waterMar.stroke(); } long endTime = System.currentTimeMillis(); System.out.println("PDF加图片水印 ok 所用时间:" + (endTime - startTime) + "s"); stamper.close(); reader.close(); } public static void main(String[] args) throws FileNotFoundException { FileInputStream inputStream = new FileInputStream(new File("D:\\2021-07-29.pdf")); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("E:\\20210729.pdf")); WaterMarkUtils.setQrCodeForPDF(bos, inputStream); } }