如何在PDF中插入透明PNG?

Posted

技术标签:

【中文标题】如何在PDF中插入透明PNG?【英文标题】:How to insert transparent PNG in PDF? 【发布时间】:2012-12-22 14:45:35 【问题描述】:

我可以使用DCTDecode 过滤器将 JPG 图像插入 PDF 文档。我认为PNG 图像的所有参数也应该相同,除了过滤器应该是FlateDecode。但是,当我尝试使用相同的参数插入 PNG 时,PNG 图像在 PDF 文档中不可见。

更新:我得出的结论是 PDF 文件应该包含

1 0 obj <<
/Type /XObject
/Subtype /Image
/Width 512
/Height 512
/BitsPerComponent 8
/ColorSpace /DeviceRGB
/SMask 9 0 R
/Length 134753    
/Filter /FlateDecode
>>
stream
PNG_RAW DATA
endstream
endobj
9 0 obj <<
/Type /XObject
/Subtype /Image
/Width 512
/Height 512
/BitsPerComponent 8
/ColorSpace /DeviceGray
/Length 12087     
/Filter /FlateDecode
>>
stream
ALPHA_PIXELS
endstream
endobj

但是如何通过ImageMagick 分离PNG 原始数据和alpha pixels?换句话说,ImageMagick 命令可以生成PDF_RAW_DATAALPHA_PIXELS 以插入到pdf 文件中。

【问题讨论】:

【参考方案1】:

很可能您没有解码 PNG 图像。

PDF 不直接支持 PNG。我的意思是它们不受支持 JPEG 的方式支持。

在将 PNG 嵌入 PDF 之前,您必须从 PNG 生成原始未压缩的光栅字节。如果您愿意,可以使用 Flate 或 LZW 编码器对光栅字节进行编码。

【讨论】:

感谢您指出问题。我编辑了我的问题以找到一个实用的解决方案。 有一些限制,PDF 直接支持 PNG。 PNG 应该是 PNG8(颜色类型 3),最多有 256 种颜色,没有透明蒙版(alpha 通道),不是隔行扫描的。 @zfr 你有嵌入这种 PNG 的 PDF 示例吗?【参考方案2】:

@Bobrovsky

这里是一个例子:http://pd4ml.com/i/pd4ml18130.pdf

更准确地说:你不能在没有任何操作的情况下绝对嵌入 PNG。您需要将 PNG 拆分为多个部分:IDAT(图像数据)以字节流不变的形式转到 PDF,PLTE(调色板)- 用于颜色空间定义,iCCP 可选择转到颜色配置文件对象。

对象字典可能如下所示:

<<
/Filter /FlateDecode
/Type /XObject
/Subtype /Image
/BitsPerComponent 8
/Length 1277
/Height 250
/Width 250
/DecodeParms <<
    /BitsPerComponent 8
    /Predictor 15
    /Columns 250
    /Colors 1
>>
/ColorSpace [/Indexed /DeviceRGB 1 <1989d1ffffff>]
>>
stream
... IDAT bytes ...

【讨论】:

感谢您的详细解释。我不知道有这种嵌入 PNG 的方法。 @zfr 实际上,可以在 PDF 中嵌入 PNG24 图像(1600 万色)而无需重新编码图像,这与您为 PNG8 图像(256 色)提供的配方完全相同)。例如(并作为参考),程序img2pdf 对非透明和非隔行图像执行此操作。

以上是关于如何在PDF中插入透明PNG?的主要内容,如果未能解决你的问题,请参考以下文章

如何减小pdf中png图像的大小(压缩pdf中的png)

使用 GhostScript 将 PDF 转换为透明 PNG

word文档如何设置图片背景透明

将外部 PDF 插入 Prawn 生成的文档

imagemagick 将 RGB PNG 转换为 CMYK PDF

Vegas7.0如何将插入的图片背景透明和移动?