THotPDF.CompressDocument

THotPDF

 

Vlastnosti  CompactFontSubsetting  EnableFontSubsetting

Jediným přepínačem zapne všechny volby zápisu, které dokument zmenšují

 

Syntaxe Delphi:

property CompressDocument: Boolean;

 

Syntaxe C++:

__property bool CompressDocument;

 

Popis

Nastavte CompressDocument na true před BeginDoc, aby se příští dokument zapsal co nejmenší, jaký ho HotPDF umí vytvořit, aniž by se změnil jeho vzhled. Pro tento dokument BeginDoc zapne:

  • kompresi FlateDecode obsahu stránek a dalších streamů, na maximální kompresní úrovni
  • cross-reference stream s object streams, který zabalí většinu objektů do komprimovaných kontejnerů (ISO 32000-1 7.5.7 a 7.5.8); každý kontejner pojme nejvýše 250 objektů místo 100, protože méně větších kontejnerů se komprimuje lépe. Limit nastavený přes ConfigureAdaptiveObjectStreamPacking se zachová
  • podmnožiny fontů, a to v režimu compact font subsets, takže každý vložený font si ponechá jen glyfy, které dokument zobrazuje

Object streams vyžadují PDF 1.5. Když je Version starší, zvýší se na PDF 1.5, pokud není verze uzamčená; výstup PDF/A-1 si podle požadavku standardu nechá klasickou cross-reference tabulku

 

CompressDocument nemění nastavení, která jste zvolili. Při zápisu dokumentu EndDoc obnoví hodnoty Compression, CompressionLevel, UseXRefStream, UseObjectStreams, EnableFontSubsetting, CompactFontSubsetting, limit objektů na kontejner i zvýšení verze, takže příští dokument bez CompressDocument se zapíše jako dřív. Obrazy si drží vlastní kompresní nastavení; nic se nepřevzorkovává a nic se nekomprimuje znovu se ztrátou

 

Vlastnost je ve výchozím stavu vypnutá. Třístránkový dokument se smíšeným anglickým a čínským textem v Arial a SimSun klesne ze zhruba 10 MB na zhruba 20 KB, většinu z toho odvede podmnožina fontů. Daň za to je výstup hůře upravitelný později: fonty v podmnožině nezobrazí znaky, které dokument nepoužívá, a komprimované object streams si v textovém editoru nepřečtete

 

Příklad:

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

 

Viz také: CompactFontSubsetting, EnableFontSubsetting, CompressLoadedDocument