|
PDF 1.5 /Type /XRef cross-reference 스트림(ISO 32000-1 7.5.8)을 텍스트 형식의 xref ... trailer 시퀀스 대신 생성합니다. 컨테이너 페이로드는 PNG Up 예측(/DecodeParms /Predictor 12)과 함께 Flate로 압축되고, /W의 필드 너비는 실제 오프셋 범위에 맞춰 조정되며(4 GiB를 넘으면 잘라내지 않고 넓힘), free-list의 빈 구간은 /Index 서브섹션으로 합쳐져 객체 번호가 듬성듬성해도 행마다 공간을 차지하지 않습니다
Delphi syntax:
property UseXRefStream: Boolean;
C++ syntax:
__property bool UseXRefStream;
Description
UseXRefStream이 true이면 EndDoc은 /Type /XRef 간접 스트림 객체 하나를 기록하며, 기존의 텍스트 xref 테이블 + trailer + startxref 시퀀스는 생성하지 않습니다. 엔트리는 /W [1 4 2]를 사용하며, 1바이트 타입 필드, 4바이트 오프셋(또는 압축 객체의 호스트 번호), 2바이트 세대 번호(또는 압축 객체 인덱스)로 구성됩니다. 테이블 전체가 FlateDecode로 압축되어 대용량 문서에서 xref 오버헤드가 보통 4-10배 줄어듭니다
XRef 스트림은 UseObjectStreams 기능의 필수 전제 조건입니다. /Type /ObjStm 컨테이너 안을 가리키는 type-2 압축 객체 엔트리는 바이너리 xref 스트림에만 담을 수 있기 때문입니다. UseXRefStream을 끄면 저장 시점에 UseObjectStreams도 자동으로 비활성화됩니다
기본값: false(opt-in - 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절이 cross-reference 스트림을 금지하므로, 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
|