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