java给pdf加水印_java pdf添加水印

本文介绍如何使用Spring Boot结合Apache PDFBox库为PDF文件添加水印。通过加载字体解决中文乱码问题,并调整透明度和颜色,以实现测试水印的展示。代码示例中展示了如何遍历PDF页面,设置旋转和位置,添加文本水印。
摘要由CSDN通过智能技术生成

spring boot pdf添加水印以下代码仅供参考

导入jar包(pdfbox)

org.apache.pdfbox

pdfbox

2.0.12

代码如下

package com.watermark.utils;

import org.apache.pdfbox.pdmodel.PDDocument;

import org.apache.pdfbox.pdmodel.PDPage;

import org.apache.pdfbox.pdmodel.PDPageContentStream;

import org.apache.pdfbox.pdmodel.PDResources;

import org.apache.pdfbox.pdmodel.font.PDFont;

import org.apache.pdfbox.pdmodel.font.PDType0Font;

import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState;

import org.apache.pdfbox.util.Matrix;

import org.springframework.util.ResourceUtils;

import java.io.File;

import java.io.InputStream;

public class PDFWatermark {

public static void main(String[] args) {

try {

watermark(new File("E:\\xx.pdf"));

} catch (Exception e) {

e.printStackTrace();

}

}

private static void watermark(File file) throws Exception {

//创建新pdf文件

File tmpPDF = new File("E:\\demo_" + file.getName());

//打开pdf文件

PDDocument doc = PDDocument.load(file);

doc.setAllSecurityToBeRemoved(true);

//遍历pdf所有页

for (PDPage page : doc.getPages()) {

PDPageContentStream cs = new PDPageContentStream(doc, page, PDPageContentStream.AppendMode.APPEND, true, true);

String ts = "测试水印测试";

//引入字体文件 解决中文汉字乱码问题

PDFont font = PDType0Font.load(doc, new FileInputStream("E:\\微软雅黑.ttf"), true);

float fontSize = 30;

PDResources resources = page.getResources();

PDExtendedGraphicsState r0 = new PDExtendedGraphicsState();

// 水印透明度

r0.setNonStrokingAlphaConstant(0.2f);

r0.setAlphaSourceFlag(true);

cs.setGraphicsStateParameters(r0);

//水印颜色

cs.setNonStrokingColor(200, 0, 0);

cs.beginText();

cs.setFont(font, fontSize);

//根据水印文字大小长度计算横向坐标需要渲染几次水印

float h = ts.length() * fontSize;

for (int i = 0; i <= 10; i++) {

// 获取旋转实例

cs.setTextMatrix(Matrix.getRotateInstance(-150, i * 100, 0));

cs.showText(ts);

for (int j = 0; j < 20; j++) {

cs.setTextMatrix(Matrix.getRotateInstance(-150, i * 100, j * h));

cs.showText(ts);

}

}

cs.endText();

cs.restoreGraphicsState();

cs.close();

}

doc.save(tmpPDF);

}

}

最终效果

6221d0a53e97

image

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值