【问题标题】:How to tell what page an image belongs to in PDF specification?如何判断图像在 PDF 规范中属于哪个页面?
【发布时间】:2011-11-28 14:12:06
【问题描述】:

我正在使用 PHP 直接从 PDF 文件中提取一些低级别的图像,因为 GhostScript 太慢了,而且我做得很好。但问题是我无法弄清楚它在哪里说明图像属于哪个页面。我从 PDF 中取出图像没有问题,但我无法弄清楚它们的顺序。

它在 PDF 数据中的什么地方说明了图像应该显示在哪个页面上?

【问题讨论】:

  • 如果你能详细分享你在做什么,我们可以提供帮助
  • 我正在从 PDF 中提取图像...用 Notepad++ 打开 PDF,你会看到它的样子。
  • 搜索分页符但你的做法可能不对
  • 您介意为此分享您的(正在工作的)PHP 脚本吗?
  • 它认为它不会在任何其他人的机器上工作,它需要系统安装 jbig2dec 和exactimage 才能读取图像,这是不常见的应用程序,必须从源安装在服务器上。

标签: php image pdf low-level


【解决方案1】:

图像作为独立对象存储在 PDF 中。它们是通过页面的资源字典 XObject 子字典从页面引用的。关系是页面 -> 资源 -> 图像,因此为了知道图像属于哪个页面,您必须扫描所有页面的所有资源字典并查看您的图像出现在哪个资源字典中。可以从多个资源字典中引用图像。这是非常低级别的 PDF 操作,我不知道您在代码中工作的级别有多低。

【讨论】:

  • 知道了。所以页面对象引用了resources对象,它引用了xobjects对象,xobjects对象引用了图像。你现在能不能回答我这个问题:它说图片放置在页面的哪个位置?
  • 为了知道图像在页面上的位置,您必须解析并执行页面内容流。使用 Do 运算符在页面上绘制图像,其操作数是资源字典中的图像 id。页面上图像的位置和大小由执行 Do 运算符时的当前变换矩阵确定。
  • 还有“内联”图像,其中图像数据直接存储在页面内容流中,而不是作为 XObject。请注意,并非所有图像都是 XObject!
  • KenS 是对的。内嵌图像在内容流中由 BI/EI 标签标识。它们的位置和大小的确定方式与标准 XObject 相同。
  • 是的,可以有多个目录对象,但只有最后一个有效。以增量模式保存文件时会出现这种情况,这种模式会将更改的对象附加到源 PDF 文件的末尾。您有多个版本的 PDF 对象(文档目录、页面等),应该只考虑最后一个版本。
猜你喜欢
  • 1970-01-01
  • 2015-06-23
  • 1970-01-01
  • 1970-01-01
  • 2020-11-18
  • 1970-01-01
  • 1970-01-01
  • 2012-05-05
  • 2014-12-23
相关资源
最近更新 更多