背景
项目中需要将客户上传的附件合并到一起,生成一个新的PDF以供查看,但是有的PDF页面纸张太大,合并之后只取到了A4大小的一个角,下面是处理前的样子。
处理后:
处理代码
public static File pdfToA4(File file) {
Document document = new Document(PageSize.A4);
String filePath = file.getParent() + File.separator + UUID.randomUUID().toString() + ".pdf";
File FileA4 = new File(filePath);
try {
PdfReader pdfReader = new PdfReader(file.getPath());
PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(filePath));
document.open();
PdfContentByte cb = pdfWriter.getDirectContent();
// 循环PDF的每一页 pdfWriter.getImportedPage(pdfReader, index) idnex从1开始
for (int i = 1; i <= pdfReader.getNumberOfPages(); i++) {
// 新增一页,不然多页的PDF会重合到一页
document.newPage();
PdfImportedPage page = pdfWriter.getImportedPage(pdfReader, i);
// 计算缩小比例 以最大缩小比例为主
// pdfReader.getPageSize(index) index是从1开始不是0
float w = PageSize.A4.width() / pdfReader.getPageSize(1).width();
float h = PageSize.A4.height() / pdfReader.getPageSize(1).height();
float Scale = w > h ? h : w;
cb.addTemplate(page, Scale, 0, 0, Scale, 0, 0);
}
document.close();
} catch (Exception e) {
e.printStackTrace();
}
// 删除原来的文件
file.delete();
return FileA4;
}