在应用程序中,用户可以上传任何尺寸为8.46“x 10.97”的pdf文件。根据我们的应用,尺寸应为8.5“x 11”。问题是,如何重新调整现有pdf页面大小以设置8.5“x 11”?我必须通过代码修复,而不是手动或推荐线或外部软件。请让我知道哪个java支持jar(免费版)提供实现此功能或通过简单的java修复也很好。
答案 0 :(得分:3)
使用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库都可能允许这样的内容,方法是提供一种显式调整大小的方法,或允许直接访问,如此处所使用。
关于您的免费版的要求,您在评论中明确了免费意味着没有购买;只要您遵守AGPL,就可以使用iText而无需购买许可证。
答案 1 :(得分:0)
也许使用PDFBox将现有文件附加到具有给定规格的新文档中,如in this question所述(iTextPdf现在提供商业许可)