|
بهجای دنباله متنی xref ... trailer یک جریان cross-reference از نوع PDF 1.5 با /Type /XRef صادر کنید (ISO 32000-1 7.5.8). محتوای کانتینر با Flate و پیشبینی PNG Up فشرده میشود (/DecodeParms /Predictor 12)، عرض فیلدها در /W با بازهٔ واقعی offsetها تطبیق مییابد (بهجای برش، فراتر از 4 GiB پهن میشود) و حفرههای لیست آزاد در زیربخشهای /Index جمع میشوند تا شمارههای شیء پراکنده دیگر بهازای هرکدام یک ردیف کامل مصرف نکنند
نحو Delphi:
property UseXRefStream: Boolean;
نحو C++:
__property bool UseXRefStream;
توضیح
وقتی UseXRefStream برابر true باشد، EndDoc بهجای جدول متنی قدیمی xref بههمراه trailer و startxref یک شیء جریان غیرمستقیم /Type /XRef مینویسد. مدخلها از /W [1 4 2] استفاده میکنند: یک فیلد نوع یکبایتی، یک offset چهاربایتی (یا شماره میزبان شیء فشردهشده)، و یک generation دوبایتی (یا اندیس شیء فشردهشده). کل جدول با FlateDecode فشرده میشود و معمولاً سربار xref را در سندهای بزرگ 4 تا 10 برابر کاهش میدهد
جریانهای XRef پیشنیاز قطعی ویژگی UseObjectStreams هستند: فقط جریان دودویی xref میتواند مدخلهای شیء فشرده نوع 2 را که به کانتینرهای /Type /ObjStm اشاره میکنند کدگذاری کند. خاموش کردن UseXRefStream بهطور خودکار UseObjectStreams را هنگام ذخیره غیرفعال میکند
Default value: false (opt-in - جدول متنی xref را برای ابزارهایی که واژه xref را بهصورت ثابت کد کردهاند و برای بیشترین سازگاری با PDF 1.4 و خوانندههای قدیمیتر نگه میدارد)
اگر Version سند پایینتر از PDF 1.5 باشد، تنظیم UseXRefStream روی true هنگام ذخیره بیصدا نادیده گرفته میشود و بهجای آن xref متنی صادر میشود
نمونه کد
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
|