如何调整现有pdf页面大小

时间:2014-01-27 07:26:27

标签: java pdf

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

2 个答案:

答案 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现在提供商业许可)