背景
项目中需要将客户上传的附件合并到一起,生成一个新的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开始不是0float 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;}

















