一、合并多页pdf
/**
* 合并多个pdf
*
* @param filePathList 文件路径
* @param result 返回文件路径
*/
public static void mergePdfFiles(List<String> filePathList, String result) throws IOException, DocumentException {
if (CollUtil.isEmpty(filePathList) || StrUtil.isEmpty(result)) {
return;
}
Document document = new Document();
PdfCopy copy = new PdfCopy(document, new FileOutputStream(result));
document.open();
for (String filePath : filePathList) {
if (StrUtil.isBlank(filePath)) {
continue;
}
try {
byte[] bytes = Files.readAllBytes(Paths.get(filePath));
if (bytes.length > 0) {
PdfReader reader = new PdfReader(bytes);
copy.addDocument(reader);
reader.close();
}
} catch (Exception ignored) {
}
}
document.close();
}
二、添加背景图片
/**
* pdf 添加背景图片
*
* @param sourceFilePath 源文件地址
* @param parentPdfDir 父文件地址
* @param destFilePath 目标文件地址
* @param backGroundImagePageSize 背景图片页数
*/
public static void pdfAddBackgroundImage(String sourceFilePath, String parentPdfDir, String destFilePath, int backGroundImagePageSize) {
try {
// 读取PDF文件流
PdfReader pdfReader = new PdfReader(sourceFilePath);
// 创建PDF文件的模板,可以对模板的内容修改,重新生成新PDF文件
PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileOutputStream(destFilePath));
// 设置PDF内容的Graphic State 图形状态
PdfGState pdfState = new PdfGState();
// 填充透明度
// pdfState.setFillOpacity(0.4f);
// 轮廓不透明度
pdfState.setStrokeOpacity(0.2f);
// PDF页数
int pdfPageNum = Math.min(pdfReader.getNumberOfPages() + 1, backGroundImagePageSize);
// PDF文件内容字节
PdfContentByte pdfContent;
for (int i = 1; i < pdfPageNum; i++) {
// 获取当前页内容,getOverContent表示之后会在页面内容的下方加背景
pdfContent = pdfStamper.getUnderContent(i);
pdfContent.saveState();
// 设置水印透明度
pdfContent.setGState(pdfState);
// 设置背景图
String imagePath = parentPdfDir + File.separator + "backGround.jpg";
if (!Files.exists(Paths.get(imagePath))) {
InputStream ins = BdPdfUtils.class.getClassLoader().getResourceAsStream("img/backGround.jpg");
FileUtils.copyInputStreamToFile(ins, new File(imagePath));
}
Image image = Image.getInstance(imagePath);
image.setAbsolutePosition(0, 0);
// A4的配置
image.scaleAbsolute(PageSize.A4);
pdfContent.addImage(image);
}
pdfStamper.close();
pdfReader.close();
} catch (Exception e) {
log.error("pdf添加背景图片失败:{}", e.getMessage());
}
}