我目前正在编写一个应用程序,使用 iText 2.1.7 根据我们的要求“格式化”PDF。
我们基本上采用纵向 PDF,并缩小页面,因此我们可以将原始 PDF 的 2 页放在新 PDF 的一个横向页面上。我们还在页面底部留出一些空间用于后期处理。
这个过程在 90% 的时间里都能正常工作。
但是,我们收到了一个已被内容部门裁剪/修剪的 PDF,当我们在 Acrobat 中查看此 PDF 时,它看起来与预期的一样。但是,当我们处理它时,新的 PDF 包括整个原始 MediaBox 和裁剪线。
这是我们使用的代码,以及问题输出的外观。
File tempFile = new File(tempFilename);
PdfReader reader = new PdfReader(originalPdfFile);
Document doc = new Document(new RectangleReadOnly(842f, 595f), 0, 0, 0, 0);
PdfWriter writer = PdfWriter.getInstance(doc, new FileOutputStream(tempFile));
doc.open();
for (int i = 1; i < reader.getNumberOfPages(); i = i + 2) {
doc.newPage();
PdfContentByte cb = writer.getDirectContent();
PdfImportedPage page = writer.getImportedPage(reader, i); // page #1
float documentWidth = doc.getPageSize().getWidth() / 2;
float documentHeight = doc.getPageSize().getHeight() - 65f;
float pageWidth = page.getWidth();
float pageHeight = page.getHeight();
float widthScale = documentWidth / pageWidth;
float heightScale = documentHeight / pageHeight;
float scale = Math.min(widthScale, heightScale);
float offsetX = (documentWidth - (pageWidth * scale)) / 2;
float offsetY = 65f; //100f
cb.addTemplate(page, scale, 0, 0, scale, offsetX, offsetY);
PdfImportedPage page2 = writer.getImportedPage(reader, i+1); // page #2
pageWidth = page.getWidth();
pageHeight = page.getHeight();
widthScale = documentWidth / pageWidth;
heightScale = documentHeight / pageHeight;
scale = Math.min(widthScale, heightScale);
offsetX = ((documentWidth - (pageWidth * scale)) / 2) + documentWidth;
offsetY = 65f; //100f
cb.addTemplate(page2, scale, 0, 0, scale, offsetX, offsetY);//430f
}
doc.close();
acrobat 中的原文:
在 acrobat 中修改,显示不需要的 pretrim 内容: