zoukankan      html  css  js  c++  java
  • 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/
  • 相关阅读:
    设计模式总结
    字符编码小结
    搞定java.io
    将代码托管到GitHub上
    linuxlinux 路由表设置 之 route 指令详解 路由表设置 之 route 指令详解
    linux子系统的初始化_subsys_initcall()
    Linux系统目录结构介绍
    EtherType :以太网类型字段及值
    socket编程原理
    linux下的网络接口和网络桥接
  • 原文地址:https://www.cnblogs.com/aknife/p/14510765.html
Copyright © 2011-2022 走看看