itext-图片水印

609 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第3天,点击查看活动详情

前言:在日常工作中,一般做合同的PDF文件时,经常需要给合同PDF加上公司的印章或者加上公司的水印,itext支持给PDF添加图片水印或者水印。这篇文章给大家说明一下如何使用itext给PDF添加图片水印或者文字水印。

一、导入依赖

<dependencies> 
    <dependency> 
        <groupId>com.itextpdf</groupId> 
        <artifactId>itextpdf</artifactId> 
        <version>5.2.0</version> 
    </dependency> 
    
    <dependency> 
        <groupId>com.itextpdf</groupId> 
        <artifactId>itext-asian</artifactId> 
        <version>5.2.0</version> 
    </dependency> 
</dependencies>

二、添加文字水印

代码如下:

/**
  * filePath:PDF生成地址
  * imgPath:图片存在地址
  *
  **/
public void createPdf(String filePath,String imgPath,){
    //生成A4大小的PDF文件,new Document()默认A4
    Document document = new Document();
    //生成书写器关联document
    PdfWriter pdfWriter = PdfWriter.getInstance(document,new FileOutputStream(filePath));
    // 打开document
    document.open();
    // PDF第一页
    document.newPage();
    //创建水印
    PdfContentByte waterMar = pdfWriter.getDirectContentUnder();
    // 开始加入水印
    waterMar.beginText();
    // 水印颜色
    waterMar.setColorFill(BaseColor.LIGHT_GRAY);
    // 水印透明度
    PdfGState gs = new PdfGState();
    gs.setFillOpacity(0.4f);
    waterMar.setGState(gs);
    //水印字体大小:
    BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);
    waterMar.setFontAndSize(baseFont,30);
    // 水印对齐方式;水印内容; 水印位于PDF的X坐标; 水印位于PDF的Y坐标 ;水印的旋转角度;
    waterMar.showTextAligned(Element.ALIGN_CENTER, "水印测试" , 100, 100, 60);
    //结束水印设置
    waterMar.endText();
    waterMar.stroke();
    // 加入PDF文字内容
    document.add(new Paragraph("111111111111111"));
    // 关闭document
    document.close();
    pdfWriter.close();
}

三、添加图片水印

/**
  * filePath:PDF生成地址
  * imgPath:图片存在地址
  *
  **/
public void createPdf(String filePath,String imgPath,){
    //生成A4大小的PDF文件,new Document()默认A4
    Document document = new Document();
    //生成书写器关联document
    PdfWriter pdfWriter = PdfWriter.getInstance(document,new FileOutputStream(filePath));
    // 打开document
    document.open();
    // PDF第一页
    document.newPage();
    //创建水印
    PdfContentByte waterMar = pdfWriter.getDirectContentUnder();
    //创建图像
    Image image=Image.getInstance(imgPath);
    //设置图片水印在PDF上相对位置,第一个参数是x坐标,第二个是y坐标
    image.setAbsolutePosition(100,100);
    //图片水印固定
    image.scaleToFit(100,100);
    //图片旋转角度
    image.setRotation(60);
    //图片缩放
    image.scalePercent(100,120);
    waterMar.addImage(image);
    // 水印透明度
    PdfGState gs = new PdfGState();
    gs.setFillOpacity(0.4f);
    waterMar.setGState(gs);
    //结束水印设置
    waterMar.stroke();
    // 加入PDF文字内容
    document.add(new Paragraph("111111111111111"));
    // 关闭document
    document.close();
    pdfWriter.close();
    
}

关于itext生成图片水印或者文字水印,还有一些属性我这里没有一一叙述。其实加入水印就像是在前端页面加入图片差不多,你需要的属性他基本上都有了,用的时候可以直接上网搜索一下或者看看itext官方文档。我这里只是大体说了一下流程。 关于使用itext生成pdf的方法,其实还有一种方法。就是先用pdf编辑器自己做一个PDF模板,需要传参的地方设置一下参数,然后在后台代码里我们只要将参数传给PDF进行渲染就可以了。但是这种方法有一个弊端,就是在模板中你设置参数多长就多长,如果你传的参数过长,有一部分内容会被隐藏。不介意的或者没这方面担忧的可以试试。