zoukankan      html  css  js  c++  java
  • java PDF添加图层,支持多页图层添加

     java PDF添加图层,支持多页图层添加

    代码:

    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.List;
    
    import com.itextpdf.text.DocumentException;
    import com.itextpdf.text.Image;
    import com.itextpdf.text.pdf.PdfContentByte;
    import com.itextpdf.text.pdf.PdfReader;
    import com.itextpdf.text.pdf.PdfStamper;
    
    public class PdfUtils {
    
        /**
         * PDF添加图层
         * 
         * @param srcPdf
         *            原PDF文件路径
         * @param distPdf
         *            合成PDF输出路径
         * @param layerPathArr
         *            图层路径列表,图层名称需为数字(按照图片名称数字顺序合成在PDF对应页数上)
         * @return
         * @throws IOException
         * @throws DocumentException
         */
        public static String markLocalImage42Dist(String srcPdf, String distPdf, List<String> layerPathArr)
                throws IOException, DocumentException {
                File srcPdfFile = new File(srcPdf);
                if (!srcPdfFile.exists()) {
                    throw new IllegalArgumentException("找不到需要添加图层的pdf文件");
                }
    
                PdfReader reader = new PdfReader(srcPdf);
                int n = reader.getNumberOfPages(); // PDF页数
    
                PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(distPdf));
                PdfContentByte over;
    
                for (String layerPath : layerPathArr) {
                    File layerFile = new File(layerPath);
                    String currentPageNo = layerFile.getName().substring(0, layerFile.getName().lastIndexOf(".")); // 图片名称(对应页数)
    
                    boolean isNum = currentPageNo.matches("[0-9]+");
                    if (!isNum) {
                        throw new IllegalArgumentException("图层名称是不是数字");
                    }
    
                    Image img = Image.getInstance(layerPath);
                    img.setAbsolutePosition(0, 0);
                    if (n > 0 && n >= Integer.parseInt(currentPageNo)) {
                        over = stamp.getOverContent(Integer.parseInt(currentPageNo));
                        over.addImage(img);
                    }
                }
                stamp.close();
                reader.close();
            return distPdf;
        }
    
    }

     测试:

    public static void main(String[] args) throws IOException, DocumentException {
            List<String> imgUrlList = new ArrayList<>();
            imgUrlList.add("D:/ts/testPDF/1.png");
            //imgUrlList.add("D:/ts/testPDF/2.png");
            imgUrlList.add("D:/ts/testPDF/3.png");
    
            markLocalImage42Dist("D:/ts/testPDF/testPDF.pdf", "D:/ts/testPDF/testPDF2.pdf", imgUrlList);
        }

    结果:

        

    原PDF:

      

    合成后PDF:

      

  • 相关阅读:
    如何使用KVM 虚拟机安装RHEL7系统
    KVM虚拟机安装报错 KVM is not available
    Delphi读取不Word中不规则表格数据并转换成标准表格
    Delphi控制Excel输出上标示例
    动态设置和访问cxgrid列的Properties(转)
    PHP存储blob示例(转)
    visual studio code(vscode) 调试php(转)
    Node入门(转)
    ThinkPHP升级指导
    微信官方demo(php)
  • 原文地址:https://www.cnblogs.com/hooly/p/8394859.html
Copyright © 2011-2022 走看看