Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[DELPHI] PDF van TIFF genereren

Pagina: 1
Acties:
  • 347 views sinds 30-01-2008
  • Reageer

  • RobLemmens
  • Registratie: Juni 2003
  • Laatst online: 09:29
Ik heb iets gemaakt om vanuit een document organizer pdfjes te genereren, dit gebeurd dan op basis van allerlij bestanden die het document opmaken. Dit heb ik werkend voor Txt, Rtf, HTML en JPEG's. Nu moet ik ook TIFFs in de pdf kunnen duwen.
Het pdf formaat ondersteund de CCITTFaxDecode die gebruikt word voor men tiffje dus kan ik die er zonder conversie induwen. Na de docs goed gelezen te hebben lijkt de methode van het wegschrijven vrijwel hetzelfde te zijn als die voor jpeg. Enkel wat parameters voor de decoder zijn anders. Toch krijg ik elke keer de error 'Insufficient Data for Image' van adobe reader terug.

Dit is bv de beschrijving van een JPEG object in een pdf.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
1 0 obj
<<
 /Type /XObject
 /Subtype /Image
 /Width 3297
 /Height 4670
 /BitsPerComponent 8
 /ColorSpace /DeviceRGB
 /Filter /DCTDecode
 /Length 1026884 >>
stream ****JPEG DATA**** endstream
>>
endobj


Deze kom zo in een pagina te staan:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
3 0 obj
 <<
  /Type /Page
  /Parent 5 0 R
  /Resources
  <<
   /XObject << /Im0 1 0 R >>
   /ProcSet [ /PDF /ImageC ]
  >>
  /MediaBox [ 0 0 3297 4670 ]
  /Contents 2 0 R
 >>
endobj



Tot zover is alles OK. Om een TIFF als pagina in een pdf te gebruiken zou volgens de docs enkel de encoding en procset goed moeten staan:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
1 0 obj
<<
 /Type /XObject
 /Subtype /Image
 /Width 3297
 /Height 4670
 /BitsPerComponent 1
 /ColorSpace /DeviceGray
 /Filter /CCITTFaxDecode
 /Length 52853 >>
stream ****TIFF DATA**** endstream
>>
endobj

3 0 obj
 <<
  /Type /Page
  /Parent 5 0 R
  /Resources
  <<
   /XObject << /Im0 1 0 R >>
   /ProcSet [ /PDF /ImageB ]
  >>
  /MediaBox [ 0 0 3297 4670 ]
  /Contents 2 0 R
 >>
endobj


Om een of andere reden krijg ik dit maar niet aan de praat. Elke keer weer krijg ik de error dat er te weinig image data is. Op internet vindt ik vrijwel niets hierover, enkel dat ik maar een of ander component moet gebruiken maar dat wil ik niet, kreng moet het gewoon doen :P

De data stream is het complete tiff bestand, net als dat je dat met een JPEG in een pdf doet. De kleur staat op zwart-wit -> ( /BitsPerComponent 1 /ColorSpace /DeviceGray ), de decoder staat op ccitt4, dezelfde als met test tiffje, de reso klopt.
Ik heb ook een pdf weten te bemachtigen die uit een fax apparaat komt, deze is ook opgebouwd uit een tiff maar als ik de stream die hierin staat effe in een lege .tiff pleur krijg ik geen geldig bestand te zien. Het lijkt er dus op dat het niet de gehele filestream is die in de pdf word weggeschreven, helaas kan ik hierover helemaal niets vinden.

Iemand hier die wel eens eerder met dit bijltje gehakt heeft en me een duwtje in de goeie richting kan geven?

  • paulh
  • Registratie: Juli 1999
  • Laatst online: 10-11 10:50
Al geprobeerd een PDF te maken met een andere tool waarin je dit zelfde TIFF bestand hebt opgenomen? Dan zou je die eens kunnen vergelijken met de pdf die je zelf genereert.

[ZwareMetalen.com] - [Kom in aktie tegen de CO2 maffia]


  • RobLemmens
  • Registratie: Juni 2003
  • Laatst online: 09:29
Die had ik, en ik kreeg met geen mogelijkheid de data van de tiff teruggezocht in de pdf...Ik ben er wel achter gekomen waarom door een zoektocht naar een functie van libtiff die raw block data inleest:

PDF Ondersteund dezelfde compressie -> CCITT G4 de image data kan dus 1 op 1 in de pdf gezet worden mits de props van het xobject goed staan. Nu is een tiff opgebouwd uit 1 of meerdere imageblocks. Ik schreef deze achter elkaar weg in de pdf. Het blijkt dat voor TIFF de compressie herstart word voor elk image blok. Mijn tiff had er 8 (een blok bevat +- 800 scanlines) maar omdat de compressie herstart word voor elk blok kon adobe men tiff data niet lezen. De oplossing is om eerst de imageblocks te decomprimeren, dan deze samenvoegen en dan weer hercomprimeren als 1 groot block. Dit block kan dan in zen geheel in de object stream weggeschreven worden.

Verwijderd

Enige vorderingen? Ben met vrijwel het zelfde bezig. Ben geïnterneerd in jou resultaten......

  • RobLemmens
  • Registratie: Juni 2003
  • Laatst online: 09:29
Het werkt nu perfect en doordat ik de meeste image streams zonder conversie derin kan streamen is het bruut snel. De conversie van 20 tiffs op 600DPI zijn binnen een seconde verwerkt tot een PDF.

Verwijderd

Als ik het goed begrip moet ik eerst elke "strip' decode dan aan elkaal plakken en dan weer encode?
Pagina: 1