【问题标题】:PNG Image not showing up in PDFPNG图像未在PDF中显示
【发布时间】:2014-01-07 15:28:09
【问题描述】:

我正确编码了我的 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。

也许是坐标? 压缩? 我在这里错过了什么?

【问题讨论】:

  • 如果你的Contents真的是[ ](即空),你的图片会怎么显示?

标签: pdf-generation png fpdf


【解决方案1】:

如果您检查 ISO-32000-1(PDF 标准),您会发现 PDF 不支持 PNG。您正在使用/FlateDecode 过滤器,这意味着您告诉PDF 查看器图像作为压缩位图存储在PDF 文件中。如果您存储压缩的 PNG,PDF 查看器将不知道如何呈现它。 (更新:您最近的更新表明您确实将图像存储为位图。)

另外:在您的页面字典(对象 10)中,您将页面的 /Contents 存储为 PDF 数组,但该数组为空。应该是[ 9 0 R ]

在您的代码示例中,您还忘记复制/粘贴 endstream 关键字。

【讨论】:

  • @user3089422 如果布鲁诺的提示没有帮助,请提供完整的 PDF 文件(例如使用一些像样的文件共享平台,如 drop box)以供检查。
  • 我阅读了“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 我会尝试填写内容数组
  • 这样就解决了。作为旁注。 PDF 1.4 支持嵌入的 PNG 图像。诀窍是知道 /FlateDecode 参数。
【解决方案2】:

以防万一它对某人有所帮助:我在尝试从 HTML 创建 pdf 时遇到了类似的问题。包含的 png 图像没有被渲染成 pdf(图像应该在的地方出现了一个小方块)。 在我的情况下,解决方案是创建 png(我们使用 Photoshop)并检查隔行扫描选项。

【讨论】:

    猜你喜欢
    • 2017-06-09
    • 2019-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多