漂流的老妖怪

导航

 

 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:

  

 

posted on 2018-02-01 09:33  漂流的老妖怪  阅读(1008)  评论(0编辑  收藏  举报