携手创作,共同成长!这是我参与「掘金日新计划 · 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进行渲染就可以了。但是这种方法有一个弊端,就是在模板中你设置参数多长就多长,如果你传的参数过长,有一部分内容会被隐藏。不介意的或者没这方面担忧的可以试试。