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

posted @ 2021-01-10 10:59  infiniteaaaaa  阅读(318)  评论(0)    收藏  举报