如何调整现有pdf页面大小

在应用程序中,用户可以上传任何pdf文件,其尺寸为8.46“x 10.97”。 根据我们的应用,尺寸应为8.5“x 11”。 问题是,如何重新调整现有pdf页面大小以设置8.5“x 11”? 我必须通过代码修复,而不是手动或推荐线或外部软件。 请让我知道哪个java支持jar(免费版)提供实现此function或通过简单的java修复也很好。

使用iText你可以这样做:

float width = 8.5f * 72; float height = 11f * 72; float tolerance = 1f; PdfReader reader = new PdfReader("source.pdf"); for (int i = 1; i <= reader.getNumberOfPages(); i++) { Rectangle cropBox = reader.getCropBox(i); float widthToAdd = width - cropBox.getWidth(); float heightToAdd = height - cropBox.getHeight(); if (Math.abs(widthToAdd) > tolerance || Math.abs(heightToAdd) > tolerance) { float[] newBoxValues = new float[] { cropBox.getLeft() - widthToAdd / 2, cropBox.getBottom() - heightToAdd / 2, cropBox.getRight() + widthToAdd / 2, cropBox.getTop() + heightToAdd / 2 }; PdfArray newBox = new PdfArray(newBoxValues); PdfDictionary pageDict = reader.getPageN(i); pageDict.put(PdfName.CROPBOX, newBox); pageDict.put(PdfName.MEDIABOX, newBox); } } PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("target.pdf")); stamper.close(); 

我介绍了容差,因为您可能不想更改大小只有一小部分的页面。

此外,您可能还希望计算页面的UserUnit值,即使它几乎没有使用过。

任何通用PDF库都可能允许这样的内容,或者提供一个显式的resize的方法,或者允许直接访问这里使用的方法。

关于你的要求免费版本,你在免费评论中澄清, 没有买 ; 只要您遵守AGPL,您就可以在不购买许可证的情况下使用iText。

也许可以使用PDFBox将现有文件附加到具有给定规格的新文档中, 如此问题中所述 (iTextPdf现在提供商业许可)