|
Xuất một stream tham chiếu chéo /Type /XRef của PDF 1.5 (ISO 32000-1 7.5.8) thay cho chuỗi văn bản xref ... trailer. Payload của container được nén Flate với PNG Up prediction (/DecodeParms /Predictor 12), độ rộng trường trong /W thích ứng với phạm vi offset thực tế (mở rộng vượt 4 GiB thay vì cắt ngắn), và các lỗ hổng trong free-list được gộp vào các tiểu mục /Index để số đối tượng thưa không còn tốn từng dòng một
Delphi syntax:
property UseXRefStream: Boolean;
C++ syntax:
__property bool UseXRefStream;
Mô tả
Khi UseXRefStream là true, EndDoc ghi một đối tượng stream gián tiếp duy nhất /Type /XRef thay cho chuỗi văn bản kiểu cũ xref + trailer + startxref. Các mục dùng /W [1 4 2]: một trường kiểu một byte, một offset bốn byte (hoặc số host của đối tượng nén), và một generation hai byte (hoặc chỉ số của đối tượng nén). Toàn bộ bảng được nén FlateDecode, thường giúp giảm chi phí xref đi 4-10 lần trên các tài liệu lớn
XRef streams là điều kiện tiên quyết bắt buộc cho tính năng UseObjectStreams: chỉ stream xref nhị phân mới có thể mã hóa các mục đối tượng nén type-2 trỏ vào các container /Type /ObjStm. Tắt UseXRefStream sẽ tự động vô hiệu hóa UseObjectStreams khi lưu
Giá trị mặc định: false (opt-in - giữ bảng xref dạng văn bản cho các công cụ mã hóa cứng từ khóa xref và để tương thích tối đa với PDF 1.4 / các trình đọc cũ hơn)
Đặt UseXRefStream thành true trên tài liệu có Version thấp hơn PDF 1.5 sẽ bị bỏ qua âm thầm khi lưu - thay vào đó sẽ xuất xref dạng văn bản
PDF/A-1 cũng ép dùng xref dạng văn bản: ISO 19005-1 xây trên PDF 1.4 và điều khoản 6.1.4 cấm cross-reference stream, nên khi PDFACompliance chỉ định mức part-1 (như 'B' hoặc 'A'), EndDoc sẽ xóa UseXRefStream và UseObjectStreams khi lưu bất kể chúng được đặt thế nào; PDF/A-2 và PDF/A-3 xây trên PDF 1.7 và vẫn tiếp tục tôn trọng cả hai
Ví dụ mã
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;
Xem thêm
UseObjectStreams, Compression, Version, Hỗ trợ bộ lọc PDF
|