java实现pdf水印详解,支持换行、旋转且样式不会错乱,贼透彻
业务需求代码实现思路效果图本地代码实现一、前期准备二、pdf水印生成简单样例(基础)三、showTextAligned方法解读四、根据需求实现水印
业务需求
在客户点击链接评价完后生成相应评价数据的pdf文件,并且添加水印,水印添加完成后进行第三方签名。水印名称为项目名称,字体默认,字号12,颜色浅灰色,水印文字排列为8 * 3(一行3个水印,一页8行),水印30度旋转,且支持文字换行,换行后文字居中。
代码实现思路
因为是公司项目,为了方便整理成了3步骤实现,第一步生成评价数据的pdf文件,第二步添加水印,第三步进行第三方签名,这篇文章主要分析水印相关的实现和详细步骤拆分,看完自己就可以根据需求定制水印,想放哪儿就放哪儿,怎么好看你就能怎么整。
效果图
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/56d30dcf13e54dc4b756cfbc7dc75462.png)
本地代码实现
一、前期准备
依赖:
com.itextpdf
itextpdf
5.4.3
com.itextpdf
itext-asian
5.2.0
一个pdf文件
二、pdf水印生成简单样例(基础)
public static void main(String[] args) throws Exception {
ReducePdfTestService reducePdfService = new ReducePdfTestService();
reducePdfService.setPdfWaterMarForFileTest("D:/file/todest/",
"test.pdf", "测试水印");
}
/**
* 给已经输出的pdf文件添加水印
* @param filePath
* @param fileName
* @param
* @throws Exception
*/
public void setPdfWaterMarForFileTest(String filePath, String fileName , String waterText) throws Exception {
// 输入PDF文件路径
String inputFile = filePath + fileName;
// 输出PDF文件路径
String outputFile = filePath +"temp_" + fileName;
// 创建PdfReader对象读取原始PDF文件
PdfReader reader = new PdfReader(inputFile);
// 创建PdfStamper对象,用于添加水印
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outputFile));
// 用于添加水印的主要对象
PdfContentByte waterMar;
// 创建水印字体
BaseFont base = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);
// 设置水印透明度
PdfGState gs = new PdfGState();
// 设置填充字体不透明度
gs.setFillOpacity(0.12f);
gs.setStrokeOpacity(0.3f);
// 获取pdf页数
int n = reader.getNumberOfPages();
// 添加水印到每一页
for (int i = 1; i |