|
テキストの 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
|