首页 > 解决方案 > 如何使用 PdfBox 缩放 pdf 文件

问题描述

我正在尝试缩放 pdf 文件,例如复印机中的缩放功能,可以按百分比缩放文档(如下所示:https ://inspectapedia.com/graphics/Safari_Page_Setup.jpg ),我正在使用 pdfbox 来管理我的 pdf文件。我已经尝试过这段代码,但为什么它不起作用?代码中没有错误。

void Scale(){
    try
    {
        PDDocument doc = PDDocument.load(new File(filePath));
        for (int p = 0; p < doc.getNumberOfPages(); ++p)
        {
            PDRectangle mediaBox = doc.getPage(p).getMediaBox();
            mediaBox.transform(Matrix.getScaleInstance(0.5f, 0.5f));
            doc.getPage(p).setMediaBox(mediaBox);
        }

        doc.save(new File(filePathEdited));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

有谁知道为什么该代码不起作用?

编辑
我需要它在 API 16 上工作

标签: javaandroidpdfpdfbox

解决方案


首先,

mediaBox.transform(Matrix.getScaleInstance(0.5f, 0.5f));

不会其更改为mediaBox原来大小的一半。相反,它返回代表缩放矩形的路径;当您忽略该表达式的返回值时,这行代码本质上是 NOP(无操作)。

如果您考虑一下,您会发现该transform方法显然无法将矩形更改为变换的结果,因为任意仿射变换的结果不再需要是矩形,特别是不再平行于页面边缘。

话虽如此,即使您的代码缩放了媒体框,结果仍然不是您想要的,结果 pdf 将仅显示原始页面的一部分,因为您只会缩放画布的可见部分而不是其内容

因此,除了实际缩放媒体框外,您还必须缩放内容。即,您必须在页面内容之前添加一个额外的内容流,并通过缩放转换来更改当前的转换矩阵。


推荐阅读