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:

      

  • 相关阅读:
    二、Elasticsearch核心配置文件详解
    javax.mail.AuthenticationFailedException: 535 authentication failed
    Java compiler level does not match the version of the installed java project facet
    一、设置cookie报非法参数异常
    slf4j的使用规范
    基于token的身份验证JWT
    单点登录
    spring的bean不能注入原因分析
    规避空指针异常规范
    Git远程操作详解
  • 原文地址:https://www.cnblogs.com/hooly/p/8394859.html
Copyright © 2011-2022 走看看