我正在尝试使用指向外部文件的链接构建PDF文件。
我正在使用规范https://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/pdf_reference_1-7.pdf
在第348页上,有一个图像示例,其中远程加载了备用图像。当我使用doc中的示例创建文档时,读者(使用acrobat reader XI)不会获取图像。没有错误消息但没有请求(使用wireshark检查)。
由于
编辑: 我使用LibreOffice创建了一个1x1像素的基础文档。 http://pastebin.com/5GqCYgMp
我最初使用Acrobat创建了我的测试文档,但输出非常混乱。
然后用pdf规范中的示例替换了流,并尝试修复startxref偏移,但不确定它是否正确。 http://pastebin.com/BT42g02P
此文档目前无法正确打开,但我尝试获得最低限度的测试用例。我以前的尝试只显示运气没有错误(但远程图像无论如何都没有工作)。
是否有任何工具实际上允许使用/ URL创建XObject?我不太了解文件格式,无法手动创建它们。
答案 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
让它看起来如此简单。