Closed. 这个问题不符合堆栈溢出指南 /help/closed-questions 。目前不接受答案。
在应用程序中,用户可以上传任何尺寸为 8.46" x 10.97" 的 pdf 文件。根据我们的应用尺寸应为 8.5" x 11"。问题是,如何重新调整现有 pdf 页面大小以设置 8.5" x 11"?我必须通过代码修复,而不是手动或命令行或外部软件。请让我知道哪个java支持jar(免费版本)提供了实现此功能的功能,或者通过简单的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 库都可能允许类似的操作,要么提供显式的调整大小的方法,要么允许直接访问(如此处所用)。
关于您的要求免费版本 你在评论中澄清了免费意味着无需购买 ;只要遵守 AGPL,您就可以使用 iText,而无需购买任何许可证。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)