2013-01-08 28 views
8

Jestem w stanie wstawić obraz JPG do dokumentu PDF z filtrem DCTDecode. Myślę, że wszystkie parametry powinny być takie same dla obrazu PNG, z wyjątkiem filtru, który powinien być FlateDecode. Jednak gdy próbuję wstawić PNG z tymi samymi parametrami, obraz PNG nie jest widoczny w dokumencie PDF.Jak wstawić przezroczysty plik PNG w formacie PDF?

UPDATE: doszedłem do wniosku, że plik PDF powinien zawierać

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 

ale jak mogę oddzielić PNG surowe dane i alpha pixels poprzez ImageMagick? Innymi słowy, polecenie ImageMagick może wytworzyć PDF_RAW_DATA i ALPHA_PIXELS do wstawienia do pliku pdf.

Odpowiedz

4

Najprawdopodobniej nie dekodowano obrazów PNG.

Pliki PNG nie są obsługiwane bezpośrednio w formacie PDF. Mam na myśli, że nie są obsługiwane w sposób, w jaki obsługiwane są pliki JPEG.

Musisz wytworzyć surowe nieskompresowane bajty rastrowe z plików PNG przed osadzeniem ich w formacie PDF. Jeśli chcesz, możesz zakodować bajty rastrowe za pomocą Flate lub LZW encoder.

+0

Dzięki za wskazanie problemu. Zmieniłem moje pytanie, aby znaleźć praktyczne rozwiązanie. – Googlebot

+1

Z pewnymi ograniczeniami PNG jest obsługiwany bezpośrednio przez PDF. PNG powinien być PNG8 (kolor typ 3), mieć maksymalnie 256 kolorów, nie mieć maski przezroczystości (kanał alfa), nie może być przepleciony. – zfr

+0

@zfr masz przykład pliku PDF z takim osadzonym PNG? – Bobrovsky

6

@Bobrovsky

Oto przykład: http://pd4ml.com/i/pd4ml18130.pdf

Aby być bardziej precyzyjne: nie można osadzić PNG absolutnie bez manipulacji z nim. Będziesz musiał podzielić PNG na sekcje: IDAT (dane obrazu) przechodzi do pliku PDF jako niezmieniony strumień bajtów, PLTE (paleta) - do definicji przestrzeni kolorów, iCCP opcjonalnie przechodzi do obiektu profilu kolorów.

słownika obiekt może wyglądać tak:

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

Dziękujemy za szczegółowe wyjaśnienie. Nie wiedziałem o takim sposobie osadzania plików PNG. – Bobrovsky