Java使用PDFBox为PDF填加水印亲测

Java使用PDFBox为PDF填加水印亲测

  • 1、maven依赖
    • java代码部分
    • 效果图片
    • 中文 微软雅黑TTF

1、maven依赖

    
        org.apache.pdfbox
        pdfbox
        2.0.12
    

java代码部分

import com.jerehsoft.ums.AuthContext;
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 java.io.File;
import java.io.FileInputStream;

public class aaAction {
public static void main(String[] args) {
try {
aaAction.watermark(new File(“D:\data\9b988e4da014.pdf” ), “D:\data\9b988e4da014.pdf”);
} catch (Exception e) {
e.printStackTrace();
}
}

private static void watermark(File file, String path) throws Exception {
    //创建新pdf文件
    File tmpPDF = new File(path);
    //打开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 = AuthContext.getUser().getUserName();
        //引入字体文件 解决中文汉字乱码问题
        PDFont font = PDType0Font.load(doc, new FileInputStream("D:\\微软雅黑.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(path);

}

}

效果图片

Java使用PDFBox为PDF填加水印亲测_第1张图片

中文 微软雅黑TTF

链接: https://pan.baidu.com/s/12NZ7mbWiFgYeBlvgDvmCOw.

提取码: a3a1

你可能感兴趣的:(实用工具,java)