THotPDF.UseObjectStreams-Eigenschaft

 

THotPDF.UseObjectStreams

THotPDF

 

Oben  Zurück  Weiter

Packt geeignete indirekte Objekte in PDF 1.5 /Type /ObjStm-Container-Streams (ISO 32000-1 7.5.7), um die PDF-Dateigröße auf dem Datenträger zu verringern

 

Delphi-Syntax:

property UseObjectStreams: Boolean;

 

C++-Syntax:

__property bool UseObjectStreams;

 

Beschreibung

Wenn UseObjectStreams auf true gesetzt ist (und UseXRefStream ebenfalls true ist), packt EndDoc jedes geeignete indirekte Objekt — Wörterbücher, Arrays, Zahlen, Namen, Zeichenketten, Booleans, Nullwerte — in einen oder mehrere /Type /ObjStm-Container-Streams gemäß ISO 32000-1 7.5.7; der Cross-Reference-Stream verweist dann über Typ-2-Einträge (Host-ObjStm-Objektnummer + Eintragsindex innerhalb dieses Streams) auf die gepackten Objekte, sodass die einzelnen N G obj ... endobj-Rahmenbytes und textuellen xref-Einträge pro Zeile entfallen

 

Lässt sich optimal mit der Eigenschaft UseXRefStream kombinieren, um die kompakteste PDF 1.5+ Writer-Pipeline zu erhalten; der ObjStm-Packer lässt Stream-Objekte, das Verschlüsselungs-Wörterbuch sowie die vom Trailer referenzierten Catalog- und Info-Wörterbücher unkomprimiert, sodass selbst minimale PDF-Parser weiterhin Dokumentwurzeln lokalisieren und Inhalte entschlüsseln können

 

Standardwert: false (Opt-in)

Das Setzen von UseObjectStreams auf true wird stillschweigend auf false herabgestuft, wenn UseXRefStream deaktiviert ist (Typ-2-Einträge können laut Spezifikation in der textuellen xref-Tabelle nicht dargestellt werden) oder wenn Version niedriger als PDF 1.5 ist

 

Unter PDF/A-1 wird es ebenfalls erzwungen deaktiviert: ISO 19005-1 (PDF 1.4, Klausel 6.1.4) verbietet komprimierte Objekt-Streams zusammen mit den Cross-Reference-Streams, auf denen sie aufbauen, sodass EndDoc immer dann eine klassische xref-Tabelle ausgibt, wenn PDFACompliance ein Part-1-Level angibt, während PDF/A-2 und PDF/A-3 (PDF 1.7) diese Option verfügbar halten

 

Code Example

HPDF := THotPDF.Create( nil );
try
  HPDF.FileName := 'c:\Output.pdf';
  HPDF.Version := pdf15;          // Object streams require PDF 1.5+
  HPDF.UseXRefStream := true;     // ObjStm references need a /Type /XRef stream
  HPDF.UseObjectStreams := true;  // Pack indirect objects into /Type /ObjStm
  HPDF.Compression := cmFlateDecode;
  HPDF.BeginDoc;
  HPDF.CurrentPage.TextOut( 100, 100, 0, 'Compact PDF 1.5 output' );
  HPDF.EndDoc;
finally
  HPDF.Free;
end;

 

Größenreduzierung

Bei Dokumenten, die von kleinen indirekten Wörterbüchern dominiert werden (mehrseitige Dokumente, Anmerkungen, AcroForm-Widgets, Strukturbaum-Elemente, optionale Inhaltsebenen), beträgt die Ersparnis typischerweise 20-40 % der Dateigröße nach der FlateDecode-Komprimierung; ein 30-seitiger reiner Grafik-Smoketest schrumpft von 14502 Bytes auf 8488 Bytes (-41,5 %)

 

Siehe auch

UseXRefStream, Compression, Version, PDF Filter Support