java - 如何调整现有 pdf 页面大小

标签 java pdf

<分区>

在应用程序中,用户可以上传任何尺寸为 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。

关于java - 如何调整现有 pdf 页面大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21375150/

相关文章:

java - 在 JSTL 中传递 boolean 值时,无法加载资源:net::ERR_INCOMPLETE_CHUNKED_ENCODING

java - 在Java中打印数组时跳过一些字符

pdf - 从 Plone 内容类型生成 PDF

HTML+CSS 生成的 .pdf 文件在不同的计算机上有不同的布局?

node.js - 将 HTML 传递给 phantom 并将其渲染为 PDF

html - 使用 wkhtmltopdf 时如何在不显示 <h*> 标签的情况下将文档分成几个部分?

java - 使用 java servlet 在浏览器中显示 Pdf

java - 共享首选项未更新

java - 使用更改监听器 javafx 仅选择 TreeView 的子项目(树项目)

java - 如何在 hibernate 4 中定义获取 session 的事务?