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 classPdfUtils {/**
* PDF添加图层
*
* @param srcPdf
* 原PDF文件路径
* @param distPdf
* 合成PDF输出路径
* @param layerPathArr
* 图层路径列表,图层名称需为数字(按照图片名称数字顺序合成在PDF对应页数上)
* @return
* @throws IOException
* @throws DocumentException*/
public static String markLocalImage42Dist(String srcPdf, String distPdf, ListlayerPathArr)
throws IOException, DocumentException {
File srcPdfFile= newFile(srcPdf);if (!srcPdfFile.exists()) {throw new IllegalArgumentException("找不到需要添加图层的pdf文件");
}
PdfReader reader= newPdfReader(srcPdf);int n = reader.getNumberOfPages(); //PDF页数
PdfStamper stamp= new PdfStamper(reader, newFileOutputStream(distPdf));
PdfContentByte over;for(String layerPath : layerPathArr) {
File layerFile= newFile(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();returndistPdf;
}
}