THotPDF.CompressDocument

THotPDF

 

Thuộc tính  CompactFontSubsetting  EnableFontSubsetting

Bật mọi tùy chọn ghi file giúp tài liệu nhỏ lại, chỉ với một công tắc

 

Cú pháp Delphi:

property CompressDocument: Boolean;

 

Cú pháp C++:

__property bool CompressDocument;

 

Mô tả

Gán CompressDocument thành true trước BeginDoc để ghi tài liệu kế tiếp nhỏ đến mức HotPDF làm được mà không thay đổi diện mạo. Riêng cho tài liệu đó, BeginDoc bật:

  • Nén FlateDecode cho nội dung trang và các stream khác, ở mức nén tối đa
  • Cross-reference stream kèm object stream, gói phần lớn đối tượng vào các container đã nén (ISO 32000-1 7.5.7 và 7.5.8); mỗi container chứa tối đa 250 object thay vì 100, vì ít container hơn rồi to hơn thì nén tốt hơn. Giới hạn đặt qua ConfigureAdaptiveObjectStreamPacking thì được giữ nguyên
  • Font subsetting với font subset compact, để mỗi font nhúng chỉ giữ lại những glyph tài liệu hiển thị

Object stream cần PDF 1.5. Khi Version cũ hơn, nó được nâng lên PDF 1.5 trừ khi phiên bản đã bị khóa; đầu ra PDF/A-1 vẫn giữ bảng tham chiếu chéo kiểu classic theo yêu cầu của chuẩn

 

CompressDocument không đụng tới các cài đặt bạn đã chọn. Khi tài liệu được ghi xong, EndDoc khôi phục giá trị của Compression, CompressionLevel, UseXRefStream, UseObjectStreams, EnableFontSubsetting, CompactFontSubsetting, giới hạn object-mỗi-container và cả việc nâng phiên bản, nên tài liệu kế tiếp không dùng CompressDocument sẽ được ghi như trước. Ảnh giữ cài đặt nén riêng của chúng; không có gì bị resample hay nén lại có mất dữ liệu

 

Property mặc định tắt. Một tài liệu ba trang trộn văn bản Anh và Trung trong Arial và SimSun giảm từ khoảng 10 MB xuống còn khoảng 20 KB, phần lớn nhờ font subsetting. Cái giá phải trả là đầu ra khó chỉnh sửa về sau: font subset không hiển thị được các ký tự tài liệu không dùng, và object stream đã nén thì không đọc được bằng trình soạn thảo văn bản

 

Ví dụ:

PDF.CompressDocument := True;
        PDF.BeginDoc;
        PDF.CurrentPage.SetFont('SimSun', [], 11);
        PDF.CurrentPage.TextOut(40, 80, 0, 'Compressed output');
        PDF.EndDoc;

 

Xem thêm: CompactFontSubsetting, EnableFontSubsetting, CompressLoadedDocument