PDFBox 生成的 PDF 尺寸(高度和宽度)被交换

Posted

技术标签:

【中文标题】PDFBox 生成的 PDF 尺寸(高度和宽度)被交换【英文标题】:PDFBox generated PDF dimensions (Height and Width) getting swapped 【发布时间】:2013-12-03 15:12:12 【问题描述】:

让我先概述一下我的项目。我有一个 pdf,我需要使用 PDFBox API 将其转换为图像(一页一张图像),并使用 PDFBox API 本身将所有这些图像写入一个新的 pdf。基本上就是将pdf转成pdf,我们称之为PDF转码。

现在,我有一些情况很好,即转码后的 pdf 与原始 pdf 内容完全匹配,但只有 1/10 的情况是,转码后的 pdf 的尺寸以某种方式被交换。例如,原始 pdf- 8.2 x 11.2 转码 pdf- 11.2 x 8.2。简而言之,高度正在与宽度交换。我不知道为什么这个 API 对于不同的文件表现不同。如果有人能回答同样的问题?

提前致谢, 毗婆娑

【问题讨论】:

PDF 页面对象可以旋转 90° 的倍数。也许其中一个使用的软件包尊重这种轮换,而另一个则没有。 感谢 mkl 回来。但是,我首先如何识别哪些对象将被旋转,哪些对象不被旋转,以便我可以在每种情况下均等地提供输出? 当您使用 PDFBox 时,您可以使用page.findRotation() 查询PDPage page 的旋转。本质上,它返回页面的 Rotate 键的值,或者(如果没有找到)它在页面树中的祖先。 谢谢 mkl。我已经这样做了,它奏效了!再次感谢! :) 好的。那我就来回答一下吧。 【参考方案1】:

(将cmets中的对话结果总结为原题)

PDF 的每一页都有一个旋转属性,可以指示另外定义的页面坐标的旋转,授予 PDF 规范ISO 32000-1:

Rotate 整数 (可选;可继承) 显示或打印页面时应顺时针旋转的度数。该值应为 90 的倍数。默认值:0。

(表 30 页面对象中的条目在第 78 页)

例如,被定义为具有 A4 纵向格式的媒体框的页面可能仍必须显示为 A4 横向页面。

在您的情况下,其中一个使用的软件包似乎尊重这种轮换,而另一个则没有。

当您使用 PDFBox 时,您可以使用查询 PDPage page 的旋转

int rotation = page.findRotation();

本质上,它返回页面的 Rotate 键的值,或者(如果没有找到)它在页面树中的祖先。

【讨论】:

谢谢 Mkl。您的建议按预期进行。现在,我们将旋转设置为 0,只要我们看到旋转不是 0。 如果您能提供帮助,我还有一个疑问:对于某些包含 JBIG2 图像的 pdf,convertToImage() 方法的 PDFbox 实现无声无息地失败,没有任何异常或错误,最后生成 PDF,但这一次,只有空白内容(白色)。我需要知道如何解决这个问题?我们有类似 import org.apache.pdfbox.filter.JBIG2Filter;我不知道如何实施。我正在寻找它,但无济于事。你能推荐一下吗? 我并不是很喜欢 PDFBox 页面渲染基础架构。你最好把这个问题本身作为一个问题。最近,至少有一位主要的 PDFBox 开发人员开始在 SO 上回答一些问题。或者让它成为 Apache PDFBox JIRA 系统中的一个问题。

以上是关于PDFBox 生成的 PDF 尺寸(高度和宽度)被交换的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PDFBox 使文本居中

iReport 生成pdf分页问题

FFMPEG - 宽度/高度不能被 2 整除(缩放以生成 MBR 输出)

获取PDFBox中字符的字体高度

使用 PDFBox 生成的 PDF 为空白

使用 PHP 获取 PDF 文件的高度和宽度