当前位置: 首页 > 知识库问答 >
问题:

如何使用PdfBox缩放pdf文件

柳俊健
2023-03-14

我正在尝试缩放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上工作

共有1个答案

双恩
2023-03-14

首先,

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

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

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

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

因此,除了实际缩放媒体框之外,您还必须缩放内容。也就是说,您必须将额外的内容流预先挂起到页面内容,并通过缩放转换更改当前转换矩阵。

 类似资料:
  • 我有一个问题,生成一个分层的pdf页面使用PDFbox。我在这里看到过几篇关于这个主题的文章,但它们都集中在将页面从另一个pdf导入到目标文档中。 我创建了一个类MapImage,它包含纸张大小(以像素为单位)和一个我想要添加到单个pdf页面的BufferedImages列表。 不幸的是,生成的PDF已损坏。我试图创建一个页面,只有一个图像(没有图层),但不幸的是,我不知道如何做到这一点。 有人遇

  • 问题内容: 我想使用Apache PDFBox从给定的PDF文件中提取文本。 我写了这段代码: 但是,出现以下错误: 我在类路径中添加了pdfbox-1.8.5.jar和fontbox-1.8.5.jar。 编辑 我添加到程序的开头。 我运行了它,然后出现了与上述相同的错误,并且未出现在控制台中。 因此,我认为我对类路径或其他东西有疑问。 谢谢。 问题答案: 我执行了您的代码,它工作正常。也许您的

  • 我似乎不知道如何使用PDFBox及其PDFPagePanel组件查看PDF页面。 因此,使用PDFBox,我的选项似乎是创建PDPage对象或PDDocument对象的列表,我使用了PDPage列表(而不是对PDDocument对象使用) 下面的代码创建一个名为testPage的PDPage对象 在这里,我想创建一个并使用它的方法将PDPage放入组件中。从这里开始,我想将组件添加到JFrame中

  • 问题内容: 我正在使用Apache PDFBox处理Java应用程序中的PDF文件。我想在每个页面上分割一个PDF文档。 是否有可能做到这一点Apache PDFBox?如果是这样,怎么办? 问题答案: 可以使用来实现。 这是一个示例代码,它将在每个页面上拆分文档: 您可以使用来控制每个拆分的PDF的页数。

  • 我正在迁移一些代码(最初使用iText)来使用PdfBox进行PDF合并。除了创建PDF包或文件夹,一切都很好。我不得不承认,直到现在我才意识到它的存在。 这是我的代码片段(使用iText): 我需要这个,但与PdfBox。 我正在研究两者的 API 和文档,但找不到解决方案。任何帮助都会很棒。 附言。如果我给人留下印象,我需要在iText中解决方案,我需要它在PdfBox中,因为迁移是从iTex

  • 当我试图在页面的内容流中添加文本时,我很难理解PDFBox的行为。我使用的是一个样本扫描PDF,它只是一个叠加在页面上的光栅图像。我的PDF内部工作知识有些基础,所以我可能走错了方向。 http://solutions.weblite.ca/pdfocrx/scansmpl.pdf 我将PDFBox 2.0.11与sbt一起使用: 我的第一步是创建一个内容流,并在PDF上写“你好世界”,我通过以下