THotPDF.UseObjectStreams 속성

 

THotPDF.UseObjectStreams

THotPDF

 

Top  Previous  Next

적합한 간접 객체를 PDF 1.5 /Type /ObjStm 컨테이너 스트림(ISO 32000-1 7.5.7)에 묶어 디스크상 PDF 크기를 줄입니다

 

Delphi syntax:

property UseObjectStreams: Boolean;

 

C++ syntax:

__property bool UseObjectStreams;

 

Description

UseObjectStreams가 true이고(UseXRefStream도 true여야 함) EndDoc가 실행되면, 딕셔너리, 배열, 숫자, 이름, 문자열, 불리언, null 등 적합한 간접 객체를 모두 ISO 32000-1 7.5.7에 따라 하나 이상의 /Type /ObjStm 컨테이너 스트림에 묶어 넣습니다. 그러면 cross-reference 스트림이 type-2 엔트리(호스트 ObjStm 객체 번호 + 해당 스트림 내부 엔트리 인덱스)로 묶인 객체를 가리키게 되므로, 객체마다 붙던 N G obj ... endobj 프레이밍 바이트와 행 단위 텍스트 xref 엔트리가 사라집니다

 

가장 컴팩트한 PDF 1.5+ 출력 파이프라인을 만들려면 UseXRefStream 속성과 함께 사용하는 것이 자연스럽습니다. ObjStm 패커는 스트림 객체, 암호화 딕셔너리, trailer가 가리키는 Catalog 및 Info 딕셔너리를 압축하지 않고 그대로 두므로, 최소 기능의 PDF 파서도 문서 루트를 찾고 콘텐츠를 복호화할 수 있습니다

 

Default value: false (opt-in).

UseXRefStream이 꺼져 있거나(스펙상 type-2 엔트리는 텍스트 xref 테이블로 표현할 수 없음) Version이 PDF 1.5 미만이면, UseObjectStreams를 true로 설정해도 조용히 false로 강등됩니다

 

PDF/A-1에서도 강제로 꺼집니다. ISO 19005-1(PDF 1.4, 6.1.4절)은 압축된 객체 스트림을 이를 담는 cross-reference 스트림과 함께 쓰는 것을 금지하므로, PDFACompliance가 part-1 수준을 지정하면 EndDoc은 기존 방식의 xref 테이블을 생성합니다. PDF/A-2와 PDF/A-3(PDF 1.7)에서는 계속 사용할 수 있습니다

 

Code Example

HPDF := THotPDF.Create( nil );
try
  HPDF.FileName := 'c:\Output.pdf';
  HPDF.Version := pdf15;          // Object streams require PDF 1.5+
  HPDF.UseXRefStream := true;     // ObjStm references need a /Type /XRef stream
  HPDF.UseObjectStreams := true;  // Pack indirect 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;

 

Size reduction

작은 간접 딕셔너리가 대부분인 문서(다중 페이지 문서, 주석, AcroForm 위젯, 구조 트리 요소, Optional Content 레이어)에서는 FlateDecode 적용 후 파일 크기 기준으로 보통 20-40%가 줄어듭니다. 그래픽만 있는 30페이지짜리 스모크 테스트는 14502바이트에서 8488바이트로 줄었습니다(-41.5%)

 

See Also

UseXRefStream, Compression, Version, PDF Filter Support