2013-01-08 235 views
8

我可以使用DCTDecode過濾器將JPG圖像插入到PDF文檔中。我認爲PNG圖片的所有參數也應該相同,除了濾鏡應該是FlateDecode。但是,當我嘗試使用相同參數插入PNG時,PNG圖像在PDF文檔中不可見。如何在PDF中插入透明PNG?

更新:我來的結論,即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原始數據,並通過ImageMagickalpha pixels?換句話說,什麼ImageMagick命令可以產生PDF_RAW_DATAALPHA_PIXELS插入到PDF文件。

回答

4

很可能你沒有解碼PNG圖像。

在PDF中不直接支持PNG。我的意思是它們不支持JPEG支持的方式。

您必須在將PNG嵌入到PDF中之前從PNG生成原始未壓縮的光柵字節。如果您願意,您可以用Flate或LZW編碼器編碼光柵字節。

+0

感謝您指出的問題。我編輯我的問題找到一個實用的解決方案。 – Googlebot

+1

有一些限制,PNG直接由PDF支持。 PNG應該是PNG8(顏色類型3),最多有256種顏色,沒有透明遮罩(alpha通道),不能交錯。 – zfr

+0

@zfr你有沒有嵌入這種PNG的PDF的例子? – Bobrovsky

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 ... 
+0

感謝您的詳細解釋。我不知道如何嵌入PNG。 – Bobrovsky