PDF添加水印

pom.xml
    <!--pdf添加水印--> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.12</version> </dependency>
package get.common.util.file;

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;
import java.io.InputStream;

public class PDF {



    public static void main(String[] args) {

        try {

            watermark(new File("D:\delivery-13020210310110043..pdf"));

        } catch (Exception e) {

            e.printStackTrace();

        }

    }



    public 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("classpath*:/static/font/Potra.otf"), true);
            PDFont font =PDType0Font.load(doc, new File("D:\BagBagCn\format\mode.ttf"));
            float fontSize = 18;

            PDResources resources = page.getResources();

            PDExtendedGraphicsState r0 = new PDExtendedGraphicsState();

            // 水印透明度

            r0.setNonStrokingAlphaConstant(0.1f);

            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);

    }

}

对pdf进行盖章/签章/数字签名

https://blog.csdn.net/tomatocc/article/details/80762507

如何用 Java 对 PDF 文件进行电子签章

https://blog.csdn.net/javasun608/article/details/79307845

关注博客 https://www.cnblogs.com/aknife/
原文地址:https://www.cnblogs.com/aknife/p/14510765.html