zoukankan      html  css  js  c++  java
  • java pdfBox给PDF添加图片水印

    package com.example.test.controller;
    
    import org.apache.pdfbox.Loader;
    import org.apache.pdfbox.cos.COSName;
    import org.apache.pdfbox.pdmodel.PDDocument;
    import org.apache.pdfbox.pdmodel.PDPage;
    import org.apache.pdfbox.pdmodel.PDPageContentStream;
    import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
    import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState;
    
    import java.io.File;
    import java.io.IOException;
    import java.util.Random;
    
    public class pdfTest {
    
        static final String DEFAULT_FILENAME = "D:\darcy\a\1.pdf"; // 源PDF
        static final String DEFAULT_FILENAME_TEMP = "D:\darcy\a\copy.pdf"; // 生成新的PDF
        static final String DEFAULT_IMAGE = "D:\darcy\a\1.jpg";  // 水印
    
        /**
         * PDF添加图片水印
         * */
        public static void main(String[] args) throws IOException {
            File file = new File(DEFAULT_FILENAME);
            PDDocument doc = Loader.loadPDF(file);
    
            // TODO 这里的数据 计算水印个数(900 150 700 150) 首个水印位置(-200至-100)都是实验得到 没有理论依据
            for (int top = 0; top < 700; top += 150) {
                int beginLeft = new Random().ints(-200, -50).limit(1).findFirst().getAsInt();
                for (int left = beginLeft; left < 700; left += 150) {
                    for(int i=0; i<doc.getNumberOfPages(); i++){
                        PDPage page = doc.getPage(i);
                        PDPageContentStream contentStream = new PDPageContentStream(doc, page, PDPageContentStream.AppendMode.APPEND, true,true);
                        PDImageXObject pdImage = PDImageXObject.createFromFile(DEFAULT_IMAGE, doc);
    
                        PDExtendedGraphicsState pdExtGfxState = new PDExtendedGraphicsState();
    
                        // 设置透明度
                        pdExtGfxState.setNonStrokingAlphaConstant(0.5f);
                        pdExtGfxState.setAlphaSourceFlag(true);
                        pdExtGfxState.getCOSObject().setItem(COSName.BM, COSName.MULTIPLY);
                        contentStream.setGraphicsStateParameters(pdExtGfxState);
    
                        float width = 100;
                        float height = 100;
                        contentStream.drawImage(pdImage, left, top, width, height);
                        contentStream.close();
                        doc.save(DEFAULT_FILENAME_TEMP);
                    }
                }
            }
            doc.close();
            
    
        }
    
    
    
    }

    pom.xml

            <!--pdf 添加水印-->
            <!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox -->
            <dependency>
                <groupId>org.apache.pdfbox</groupId>
                <artifactId>pdfbox</artifactId>
                <version>3.0.0-RC1</version>
            </dependency>
    
            <!--pdf 添加水印-->    

    效果图:

  • 相关阅读:
    UVa 116 单向TSP(多段图最短路)
    POJ 1328 Radar Installation(贪心)
    POJ 1260 Pearls
    POJ 1836 Alignment
    POJ 3267 The Cow Lexicon
    UVa 1620 懒惰的苏珊(逆序数)
    POJ 1018 Communication System(DP)
    UVa 1347 旅行
    UVa 437 巴比伦塔
    UVa 1025 城市里的间谍
  • 原文地址:https://www.cnblogs.com/todarcy/p/15075496.html
Copyright © 2011-2022 走看看