THotPDF.CompressDocument

THotPDF

 

คุณสมบัติ  CompactFontSubsetting  EnableFontSubsetting

เปิด option ฝั่ง writer ที่ทำให้เอกสารเล็กลงทุกอย่างในครั้งเดียวด้วยสวิตช์เดียว

 

ไวยากรณ์ Delphi:

property CompressDocument: Boolean;

 

ไวยากรณ์ C++:

__property bool CompressDocument;

 

คำอธิบาย

ตั้ง CompressDocument เป็น true ก่อน BeginDoc เพื่อเขียนเอกสารถัดไปให้เล็กที่สุดเท่าที่ HotPDF จะทำได้โดยไม่เปลี่ยนหน้าตาเอกสาร สำหรับเอกสารฉบับนั้น BeginDoc จะเปิด:

  • บีบอัด page content กับ stream อื่นด้วย FlateDecode ที่ระดับบีบอัดสูงสุด
  • cross-reference stream คู่กับ object stream ซึ่งแพ็ก object ส่วนใหญ่ลงใน container ที่บีบอัดแล้ว (ISO 32000-1 7.5.7 และ 7.5.8); แต่ละ container บรรจุได้สูงสุด 250 object แทน 100 เพราะ container ที่ใหญ่ขึ้นและน้อยลงบีบอัดได้ดีกว่า ขีดจำกัดที่ตั้งผ่าน ConfigureAdaptiveObjectStreamPacking จะถูกเก็บไว้
  • font subsetting แบบ compact font subset ฟอนต์ที่ฝังแต่ละตัวจึงเก็บเฉพาะ glyph ที่เอกสารแสดง

object stream ต้องการ PDF 1.5 ถ้า Version เก่ากว่านั้น เวอร์ชันจะถูกเพิ่มเป็น PDF 1.5 เว้นแต่ถูกล็อกไว้, ส่วน output PDF/A-1 ยังใช้ cross-reference table แบบดั้งเดิมตามที่มาตรฐานกำหนด

 

CompressDocument ไม่แตะค่า setting ที่คุณเลือกไว้เอง เมื่อเอกสารถูกเขียนแล้ว EndDoc จะคืนค่าของ Compression, CompressionLevel, UseXRefStream, UseObjectStreams, EnableFontSubsetting, CompactFontSubsetting, ขีดจำกัด object ต่อ container และการเพิ่มเวอร์ชันกลับตามเดิม เอกสารถัดไปที่ไม่ใช้ CompressDocument จึงถูกเขียนออกมาเหมือนเดิม ส่วนรูปภาพยังใช้ค่าบีบอัดของตัวเอง ไม่มีอะไรถูก resample หรือบีบอัดซ้ำแบบมี loss

 

property นี้ปิดอยู่โดย default เอกสารสามหน้าที่ผสมข้อความอังกฤษกับจีนด้วย Arial กับ SimSun ลดจากราว 10 MB เหลือราว 20 KB ซึ่งส่วนใหญ่มาจาก font subsetting ข้อแลกเปลี่ยนคือ output จะแก้ไขภายหลังยากขึ้น: ฟอนต์แบบ subset แสดงอักษรที่เอกสารไม่ได้ใช้ไม่ได้ และ object stream ที่บีบอัดแล้วก็อ่านด้วย text editor ไม่ได้

 

ตัวอย่าง:

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

 

ดูเพิ่มเติม: CompactFontSubsetting, EnableFontSubsetting, CompressLoadedDocument