如何在PDF中插入透明PNG?

时间:2013-01-08 17:01:45

标签: image pdf adobe imagemagick png

我能够将JPG图像插入带有DCTDecode过滤器的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

但我如何将PNG原始数据与alpha pixels通过ImageMagick分开?换句话说,ImageMagick命令可以生成PDF_RAW_DATAALPHA_PIXELS以插入pdf文件。

2 个答案:

答案 0 :(得分:6)

@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 ...

答案 1 :(得分:4)

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

PDF不直接支持PNG。我的意思是不支持JPEG支持。

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