JAVA ITEXT5 导出为PDF(二) 在已有的PDF文件中添加水印

在(一)的背景下,直接上代码:(里面出现的几个特别的类要注意:如 PdfReader  PdfStamper)

/** 
  * 对一个图片对象设置展示位置等信息,该对象重复利用,减少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();
}

猜你喜欢

转载自blog.csdn.net/qq_39028580/article/details/80292132