THotPDF.UseObjectStreams Property

 

THotPDF.UseObjectStreams

THotPDF

 

先頭  前へ  次へ

対象となる間接オブジェクトを PDF 1.5 の /Type /ObjStm コンテナストリーム(ISO 32000-1 7.5.7)に詰め込み、ディスク上の PDF サイズを削減します

 

Delphi 構文:

property UseObjectStreams: Boolean;

 

C++ 構文:

__property bool UseObjectStreams;

 

Description

UseObjectStreams が true(かつ UseXRefStream も true)のとき、EndDoc は対象となるすべての間接オブジェクト、辞書、配列、数値、名前、文字列、真偽値、null を、ISO 32000-1 7.5.7 に従って 1 つ以上の /Type /ObjStm コンテナストリームへ詰め込みます。クロスリファレンスストリームは、type-2 エントリ(ホスト ObjStm オブジェクト番号 + そのストリーム内のエントリインデックス)で詰め込まれたオブジェクトを参照するため、個々の N G obj ... endobj フレーミングバイトと行ごとのテキスト xref エントリが不要になります

 

UseXRefStream プロパティと自然に組み合わさり、最もコンパクトな PDF 1.5+ ライターパイプラインになります。ObjStm パッカーは、ストリームオブジェクト、暗号化辞書、trailer が指す Catalog / Info 辞書を圧縮せずに残すため、最小限の PDF パーサーでもドキュメントルートの特定と内容の復号が可能です

 

既定値: false(オプトイン)

UseObjectStreams を true にしても、UseXRefStream がオフのとき(type-2 エントリは仕様上テキストの xref テーブルでは表現できません)や Version が PDF 1.5 未満のときは、黙って false にダウングレードされます

 

PDF/A-1 では強制オフになります。ISO 19005-1(PDF 1.4、条項 6.1.4)は、圧縮オブジェクトストリームと、それが乗るクロスリファレンスストリームを禁止しているためです。PDFACompliance が part-1 レベルを名指しすると EndDoc はクラシックな xref テーブルを出力します。PDF/A-2 と PDF/A-3(PDF 1.7)では利用可能なままです

 

コード例

HPDF := THotPDF.Create( nil );
try
  HPDF.FileName := 'c:\Output.pdf';
  HPDF.Version := pdf15;          // Object streams require PDF 1.5+
  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;

 

サイズ削減

小さな間接辞書が大半を占めるドキュメント(複数ページドキュメント、注釈、AcroForm ウィジェット、構造ツリー要素、Optional Content レイヤー)では、通常 FlateDecode 後のファイルサイズの 20〜40% を節約できます。グラフィックスのみの 30 ページのスモークテストでは、14502 バイトから 8488 バイト(-41.5%)へ縮みます

 

関連項目

UseXRefStream, Compression, Version, PDF Filter Support