带有外部图像的PDF使用XObject

时间:2016-03-30 19:46:39

标签: pdf

我正在尝试使用指向外部文件的链接构建PDF文件。

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

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

  1. 我是否只能拥有一张遥控影像(即没有"普通"影像和替代影像)。
  2. 使用/ FS / URL语法(即不仅仅是对象)是否存在完整文档的某个示例?我找不到任何实际的请求。
  3. 由于

    编辑: 我使用LibreOffice创建了一个1x1像素的基础文档。 http://pastebin.com/5GqCYgMp

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

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

    此文档目前无法正确打开,但我尝试获得最低限度的测试用例。我以前的尝试只显示运气没有错误(但远程图像无论如何都没有工作)。

    是否有任何工具实际上允许使用/ URL创建XObject?我不太了解文件格式,无法手动创建它们。

1 个答案:

答案 0 :(得分:5)

首先,

  

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

我建议不要使用PDF参考,而是使用ISO标准。在ISO标准中,Adobe PDF引用本质上不是规范性的。 (实际内容差异很小,但如果有规范性规范,则应使用它。)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个字节({{ 1}}),参见第8.9.5节ISO 32000-1的图像字典。

我怀疑你的文件是否符合要求,我认为它实际上是一个PNG文件,特别是PNG结构,而不是上面解释的结构。

PDF不支持PNG格式,您必须转换数据。但它支持使用/BitsPerComponent 8的JPEG格式,这就是规范中的样本

/FFilter /DCTDecode

让它看起来如此简单。