PDF中PNG图像无法显示

3

我已经正确编码了我的PNG图像,它是一个灰度8位的图像。该图像的尺寸为5100(w) x 6600(h),MediaBox为5100.0 6600.0。

图片:

3 0 obj
<<
/ProcSet [/PDF /ImageB]
/XObject <<
/Im8 8 0 R
>>
>>
endobj


8 0 obj
<<
/Type /XObject
/Subtype /Image
/BitsPerComponent 8
/ColorSpace /DeviceGray
/Height 6600
/Width 5100
/Filter /FlateDecode
/Length 590065
>>
stream
....zlib compressed stream

图像转换:

9 0 obj
<</Length 54>>
stream
q
5100 0 0 6600 0 0 cm
/Im8 Do
Q
endstream
endobj

页面:

10 0 obj
<<
/Type /Page
/Parent 2 0 R
/CropBox [0.0 0.0 5100.0 6600.0]
/MediaBox [0.0 0.0 5100.0 6600.0]
/Resources 3 0 R
/Contents [  ]
>>
endobj

图片无法显示。我逐像素验证过。
这个流总共有 33666600(5100x6600 + 6600)字节。其中,6600 字节表示使用的预测器。在我的情况下,它是 /Predictor 13。
我只写入了这 33666600 个字节,即压缩后的 IDAT。
也许是坐标?压缩方式?我错过了什么吗?

如果你的内容真的是 [ ](即空的),你认为你的图片会如何显示? - Martin Schröder
2个回答

2
如果您查看ISO-32000-1(PDF标准),您会发现PDF不支持PNG格式。您正在使用/FlateDecode过滤器,这意味着您告诉PDF查看器图像作为压缩位图存储在PDF文件中。如果您存储了压缩的PNG,则PDF查看器将不知道如何呈现它。(更新:您最近的更新表明您确实将图像存储为位图。)
此外,在您的页面字典(对象10)中,您将页面的/Contents存储为PDF数组,但该数组为空。它应该是[ 9 0 R ]
在您的代码示例中,您还忘记复制/粘贴endstream关键字。

如果Bruno的提示没有帮助,请提供完整的PDF文件(例如使用像Dropbox这样的体面文件共享平台)进行检查。 - mkl
我阅读了《Adobe Portable Document Format Version 1.4》文档。我也按照v4生成了该文档。我将尝试填充内容数组。 0000000 045 120 104 106 055 061 056 064 015 045 200 231 242 243 015 012 % P D F - 1 . 4 \r % 200 231 242 243 \r \n - greenpau
所以问题得到了解决。顺便说一下,PDF 1.4支持嵌入PNG图像。诀窍在于了解/FlateDecode参数。 - greenpau

1

如果有人需要帮助,我遇到了一个类似的问题,当尝试从HTML创建PDF时。包含的PNG图像没有被呈现为PDF(一个小正方形出现在图像应该出现的位置)。 在我的情况下解决方案是创建PNG(我们使用Photoshop)时选中交错选项。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接