THotPDF.UseXRefStream Property

 

THotPDF.UseXRefStream

THotPDF

 

先頭  前へ  次へ

テキストの xref ... trailer 列の代わりに、PDF 1.5 の /Type /XRef クロスリファレンスストリーム(ISO 32000-1 7.5.8)を出力します。コンテナのペイロードは PNG Up 予測(/DecodeParms /Predictor 12)付きの Flate 圧縮で、/W のフィールド幅は実際のオフセット範囲に適応し(切り詰めではなく 4 GiB 超で拡張)、フリーリストの穴は /Index サブセクションに折りたたまれるため、疎なオブジェクト番号が 1 行ずつコストを払うことはなくなります

 

Delphi 構文:

property UseXRefStream: Boolean;

 

C++ 構文:

__property bool UseXRefStream;

 

Description

UseXRefStream が true のとき、EndDoc はレガシーなテキストの xref テーブル + trailer + startxref 列の代わりに、単一の /Type /XRef 間接ストリームオブジェクトを書き込みます。エントリは /W [1 4 2] を使います。1 バイトのタイプフィールド、4 バイトのオフセット(または圧縮オブジェクトのホスト番号)、2 バイトの世代(または圧縮オブジェクトのインデックス)です。テーブル全体が FlateDecode 圧縮され、大きなドキュメントでは xref オーバーヘッドを通常 4〜10 分の 1 に削減します

 

XRef ストリームは UseObjectStreams 機能の必須前提です。type-2 の圧縮オブジェクトエントリ(/Type /ObjStm コンテナを指す)を符号化できるのはバイナリの xref ストリームだけです。UseXRefStream をオフにすると、保存時に UseObjectStreams が自動的に無効化されます

 

既定値: false(オプトイン。xref キーワードをハードコードするツールや、PDF 1.4 / それ以前のリーダーとの最大限の互換性のために、テキストの xref テーブルを保持します)

Version が PDF 1.5 未満のドキュメントで UseXRefStream を true にしても、保存時には黙って無視され、テキストの xref が出力されます

 

PDF/A-1 もテキストの xref を強制します。ISO 19005-1 は PDF 1.4 を土台とし、条項 6.1.4 がクロスリファレンスストリームを禁止しているためです。PDFACompliance が part-1 レベル('B' や 'A' など)を名指しすると、設定のいかんにかかわらず EndDoc は保存時に UseXRefStream と UseObjectStreams をクリアします。PDF/A-2 と PDF/A-3 は PDF 1.7 を土台とするため、両方とも尊重されます

 

コード例

HPDF := THotPDF.Create( nil );
try
  HPDF.FileName := 'c:\Output.pdf';
  HPDF.Version := pdf15;          // Required for XRef streams
  HPDF.UseXRefStream := true;     // Emit /Type /XRef instead of xref table
  HPDF.UseObjectStreams := true;  // Optional: also pack 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;

 

関連項目

UseObjectStreams, Compression, Version, PDF Filter Support