java PDF添加水印效果

需要引的jar包:

com.itextpdf
itextpdf
5.5.3

	<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
com.lowagie itext 4.2.2
	代码:

package pdfTestwaterMark;
import java.awt.FontMetrics;
import java.io.FileOutputStream;
import javax.swing.JLabel;
import com.itextpdf.text.Element;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfGState;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;

public class TestwaterMark {
private static int interval = -5;
public static void waterMark(String inputFile,
String outputFile, String waterMarkName) {
try {
PdfReader reader = new PdfReader(inputFile);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(
outputFile));

        BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",   BaseFont.EMBEDDED);  
        
        Rectangle pageRect = null;  
        PdfGState gs = new PdfGState();  
					//设置透明度
        gs.setFillOpacity(0.3f);  
        gs.setStrokeOpacity(0.4f);  
        int total = reader.getNumberOfPages() + 1;   
          
        JLabel label = new JLabel();  
        FontMetrics metrics;  
        int textH = 0;   
        int textW = 0;   
        label.setText(waterMarkName);   
        metrics = label.getFontMetrics(label.getFont());   
        textH = metrics.getHeight();
        textW = metrics.stringWidth(label.getText());  
            
        PdfContentByte under;    
        for (int i = 1; i < total; i++) {   
            pageRect = reader.getPageSizeWithRotation(i);   
            under = stamper.getOverContent(i);   
            under.saveState();  
            under.setGState(gs);  
            under.beginText();    
            under.setFontAndSize(base, 20);    
							//设置水印颜色
							under.setColorFill(BaseColor.RED);
           
            // 水印文字成30度角倾斜  
            //你可以随心所欲的改你自己想要的角度
            for (int height = interval + textH; height < pageRect.getHeight();  
                    height = height + textH*3) {    
                for (int width = interval + textW; width < pageRect.getWidth() + textW;   
                        width = width + textW*2) {  
            under.showTextAligned(Element.ALIGN_LEFT  
                    , waterMarkName, width - textW,  
                    height - textH, 30);  
                }  
            }  
            // 添加水印文字    
            under.endText();    
        }   
        //说三遍
       //一定不要忘记关闭流
      //一定不要忘记关闭流
      //一定不要忘记关闭流
        stamper.close();  
        reader.close();
    } catch (Exception e) {    
        e.printStackTrace();    
    }    
}    

public static void main(String[] args) {
	 waterMark("C:/Users/86150/Desktop/20180518大图纸测试/A0/PDFtest.pdf", "C:/Users/86150/Desktop/20180518大图纸测试/A0/PDFtestDemo.pdf", "济南炼化分公司");  

}

}

猜你喜欢

转载自blog.csdn.net/qq_37617076/article/details/86504885