|
Видає потік перехресних посилань /Type /XRef PDF 1.5 (ISO 32000-1 7.5.8) замість текстової послідовності xref ... trailer. Корисне навантаження контейнера стискається Flate з передбаченням PNG Up (/DecodeParms /Predictor 12), ширини полів у /W адаптуються до фактичного діапазону зміщень (розширюються за 4 GiB замість обрізання), а прогалини списку вільних записів згортаються у підсекції /Index, тож рідкісні номери об'єктів більше не коштують по одному рядку кожен
Delphi syntax:
property UseXRefStream: Boolean;
C++ syntax:
__property bool UseXRefStream;
Опис
Коли UseXRefStream дорівнює true, EndDoc записує один непрямий об'єкт потоку /Type /XRef замість застарілої текстової послідовності xref таблиця + trailer + startxref. Записи використовують /W [1 4 2]: однобайтове поле типу, чотирибайтове зміщення (або номер хоста стиснутого об'єкта) та двобайтове покоління (або індекс стиснутого об'єкта). Уся таблиця стискається FlateDecode, що зазвичай скорочує накладні витрати xref у великих документах у 4-10 разів
Потоки XRef є жорсткою передумовою для функції UseObjectStreams: лише бінарний потік xref може кодувати записи type-2 стиснутих об'єктів, які вказують на контейнери /Type /ObjStm. Вимкнення UseXRefStream автоматично вимикає UseObjectStreams під час збереження
Значення за замовчуванням: false (увімкнення вручну - зберігає текстову таблицю xref для інструментів, що жорстко кодують ключове слово xref, і для максимальної сумісності з читачами PDF 1.4 / старішими)
Встановлення UseXRefStream у true для документа, чия Version нижча за PDF 1.5, мовчки ігнорується під час збереження - натомість виводиться текстовий 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 і продовжують підтримувати обидва
Code Example
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;
See Also
UseObjectStreams, Compression, Version, PDF Filter Support
|