How to insert transparent PNG in PDF?

Googlebot picture Googlebot · Jan 8, 2013 · Viewed 10.6k times · Source

I am able to insert JPG image into a PDF document with DCTDecode filter. I think the all parameters should be the same for PNG image too, except the filter which should be FlateDecode. However, when I try to insert PNG with the same parameters, the PNG image is not visible in he PDF document.

UPDATE: I came to conclusion that the PDF file should include

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

BUT how can I separate the PNG raw data and the alpha pixels via ImageMagick? In other words, what ImageMagick command can produce PDF_RAW_DATA and ALPHA_PIXELS for insertion into the pdf file.

Answer

zfr picture zfr · Nov 15, 2013

@Bobrovsky

Here is an example: http://pd4ml.com/i/pd4ml18130.pdf

To be more accurate: you cannot embed a PNG absolutely with no manipulations with it. You would need to split a PNG to sections: IDAT (image data) goes to PDF as byte stream unchanged, PLTE (palette) - to colorspace definition, iCCP optionally goes to color profile object.

An object dictionary may look like that:

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