【发布时间】:2019-06-16 18:15:03
【问题描述】:
我正在尝试缩放 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
【问题讨论】:
-
PDRectangle.transform() 返回一个路径。它不会改变论点。我想你想要的是这个:stackoverflow.com/a/49689891/535646
-
我需要它在 api 16 上工作,此代码 PDPageContentStream cs = new PDPageContentStream(doc, page, AppendMode.PREPEND, true) 仅适用于 api 19 及更高版本
-
对不起,我没有注意到它是关于 Android 版 PDFBox 的。我不知道他们是否曾经实现过前置功能。最好的方法是 1)为 PDFBox 桌面实现它,看看它是否是你需要的;您显然想要的(使矩形更小)只会创建一个更小的媒体框,但不会使内容更小。如果是,那么请查看源代码中的“前置”操作是如何完成的,然后使用适用于 Android 的 PDFBox 执行此操作,即将原始缩放命令插入内容流/内容流数组。
-
其实我是想让内容变小
-
是的,要做到这一点,最好的方法是在页面内容流中预先添加代码进行转换,例如0.9 0 0 0.9 0 0 厘米 \n .