我正确编码了我的PNG图像。它是灰度,8位。图像为5100(宽)x 6600(高)。 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。
也许坐标? 压缩? 我在这里缺少什么?
答案 0 :(得分:2)
如果您检查ISO-32000-1(PDF标准),您会发现PDF不支持PNG。您正在使用/FlateDecode
过滤器,这意味着您告诉PDF查看器图像作为压缩位图存储在PDF文件中。如果存储压缩的PNG,PDF查看器将不知道如何呈现它。 (更新:您最近的更新表明您将图像存储为位图。)
另外:在您的页面词典(对象10)中,您将页面的/Contents
存储为PDF数组,但该数组为空。它应该是[ 9 0 R ]
在您的代码示例中,您也忘记了复制/粘贴endstream
关键字。
答案 1 :(得分:0)
以防万一:尝试从HTML创建pdf时,我遇到了类似的问题。所包含的png图像未呈现为pdf(应该在该图像所在的位置出现了一个小方块)。 在我的情况下,解决方案是创建已检查隔行扫描选项的png(我们使用photoshop)。