【问题标题】:PDF with an external image using XObject使用 XObject 带有外部图像的 PDF
【发布时间】:2016-04-13 15:58:49
【问题描述】:

我正在尝试构建一个带有外部文件链接的 PDF 文件。

我正在使用规范https://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/pdf_reference_1-7.pdf

在第 348 页上有一个带有远程加载备用图像的图像示例。当我使用文档中的示例创建文档时,阅读器(使用 acrobat reader XI)不会获取图像。没有错误消息,但没有发出请求(使用wireshark检查)。

  1. 我可以只有一个远程图像(即没有“正常”图像和备用图像)。
  2. 是否有使用 /FS /URL 语法的完整文档的示例(即不仅仅是对象)?我找不到任何真正执行该请求的人。

谢谢

编辑: 我使用 LibreOffice 创建具有单个 1x1 像素的基本文档。 http://pastebin.com/5GqCYgMp

我最初使用 Acrobat 创建了我的测试文档,但输出非常混乱。

然后用 pdf 规范中的示例替换流,并尝试修复 startxref 偏移,但不确定它是否正确。 http://pastebin.com/BT42g02P

此文档当前未正确打开,但我尝试获取最小测试用例。我之前的尝试仅靠运气显示没有错误(但远程图像无论如何都不起作用)。

是否有任何工具实际上允许使用 /URL 创建 XObject?我对文件格式的了解不足以手动可靠地创建它们。

【问题讨论】:

  • 请分享您的确切文件。
  • 我添加了一个示例,如果有帮助请告诉我,谢谢
  • 我最终来到这里想知道这是否可以做到,运气好@NicolasEsteves ?

标签: pdf


【解决方案1】:

首先,

我正在使用规范https://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/pdf_reference_1-7.pdf

我建议不要使用 PDF 参考,而是使用 ISO 标准。 Adobe PDF 参考在本质上不是规范性的,而 ISO 标准是。 (实际内容差异很小,但如果有规范规范,应该使用它。)Adobe 还发布了copy of the ISO standard with merely the header exchanged

那么,请不要将 PDF 视为文本文档。例如。通过在 pastebin 上共享它们,您可以使它们受到本质上破坏内容的文本的处理。

说了这么多,让我们看看你的实际问题:

在您的示例 PDF 中,您有:

4 0 obj
<</Type/XObject/Subtype/Image/Width 1/Height 1/BitsPerComponent 8/Length 0/F << /FS /URL
/F ( https://upload.wikimedia.org/wikipedia/commons/c/ca/1x1.png )
>>/Filter/FlateDecode/ColorSpace/DeviceRGB
>>
stream
endstream
endobj

这表明 PDF 查看器应在 URL https://upload.wikimedia.org/wikipedia/commons/c/ca/1x1.png 找到一个文件,该文件包含 1 个 (/Width 1/Height 1) RGB (/ColorSpace/DeviceRGB) 样本数组,每种颜色 1 个字节 (/BitsPerComponent 8),参见第8.9.5节ISO 32000-1的图像字典。

我怀疑你的文件是否满足这一点,我认为它实际上是一个 PNG 文件,特别是具有 PNG 结构,而不是上面解释的结构。

PDF 不支持 PNG 格式,您必须转换数据。不过,它确实支持使用 /FFilter /DCTDecode 的 JPEG 格式,这就是规范中的示例

16 0 obj
  << /Type /XObject
     /Subtype /Image
     /Width 1000
     /Height 2000
     /ColorSpace /DeviceRGB
     /BitsPerComponent 8
     /Length 0 % This is an external stream
     /F << /FS /URL
           /F (http://www.myserver.mycorp.com/images/exttest.jpg)
        >>
     /FFilter /DCTDecode
  >>
stream
endstream
endobj

让它看起来很简单。

【讨论】:

  • 是否有 PDF 文件显示此方法有效?我无法创建一个。
  • @Mijail 我不得不承认我没有尝试过。在我的回答中,我只是指出了 OP 的 PDF 的明显问题......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-22
  • 1970-01-01
  • 1970-01-01
  • 2015-02-05
相关资源
最近更新 更多