JAVA ITEXT5 导出为PDF 在已有的PDF文件中添加水印
/** * 对一个图片对象设置展示位置等信息,该对象重复利用,减少PDF文件大小 * @param waterMarkImage * @param xPosition * @param yPosition * @return */ public static Image getSingletonWaterMarkImage(Image waterMarkImage,float xPosition,float yPosition){ waterMarkImage.setAbsolutePosition(xPosition, yPosition);//坐标 waterMarkImage.setRotation(-20);//旋转 弧度 waterMarkImage.setRotationDegrees(-45);//旋转 角度 waterMarkImage.scalePercent(100);//依照比例缩放 return waterMarkImage; } /** * 对于已存在的PDF文件增加图片水印 * @param sourceUrl * @param outfileUrl * @param imgUrl */ public static void addPictureWaterMark(String sourceUrl,String outfileUrl,String imgUrl) { try { //Read file using PdfReader PdfReader pdfReader = new PdfReader(sourceUrl); //Modify file using PdfReader PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileOutputStream(outfileUrl)); //仅设置一个图片实例对象,整个PDF文档只应用一个图片对象,极大减少因为增加图片水印导致PDF文档大小增加 Image image = Image.getInstance(imgUrl); // image.scaleAbsolute(100, 50); // image.setAbsolutePosition(100f, 700f); float pageWidth = 0; float pageHeight = 0; for(int i=1; i<= pdfReader.getNumberOfPages(); i++){ pageWidth = pdfReader.getPageSize(i).getWidth(); pageHeight = pdfReader.getPageSize(i).getHeight(); PdfContentByte content = pdfStamper.getUnderContent(i); content.addImage(getSingletonWaterMarkImage(image,pageWidth*0.2f,pageHeight*0.4f)); } pdfStamper.close(); pdfReader.close(); } catch (IOException e) { e.printStackTrace(); } catch (DocumentException e) { e.printStackTrace(); } } /** * 对于已存在的PDF文件增加文字水印 * @param sourceUrl * @param outfileUrl * @param waterMarkText * @throws IOException * @throws DocumentException */ public static void addTextWaterMark(String sourceUrl,String outfileUrl,String waterMarkText,BaseFont baseFont) throws IOException, DocumentException { PdfReader reader = new PdfReader(sourceUrl); PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(new File(outfileUrl))); PdfContentByte under; int pageSize = reader.getNumberOfPages();// 原pdf文件的总页数 for(int i = 1; i <= pageSize; i++) { under = stamp.getUnderContent(i);// 水印在之前文本下 under.beginText(); under.setColorFill(BaseColor.CYAN);// 文字水印 颜色 under.setFontAndSize(baseFont,38);// 文字水印 字体及字号 under.setTextMatrix(300, 350);// 文字水印 起始位置 under.showText(waterMarkText); under.endText(); // PdfGState gs = new PdfGState(); // gs.setFillOpacity(0.1f);// 设置透明度为0.2 // under.setGState(gs); } stamp.close();// 关闭 reader.close(); }
原文来自:https://blog.csdn.net/qq_39028580/article/details/80292132

浙公网安备 33010602011771号