THotPDF.CompressDocument

THotPDF

 

Eigenschappen  CompactFontSubsetting  EnableFontSubsetting

Zet met één schakelaar elke schrijfoptie aan die het document kleiner maakt

 

Delphi syntax:

property CompressDocument: Boolean;

 

C++ syntax:

__property bool CompressDocument;

 

Beschrijving

Zet CompressDocument vóór BeginDoc op true om het volgende document zo klein te schrijven als HotPDF kan zonder het uiterlijk te veranderen. Voor dat document zet BeginDoc aan:

  • FlateDecode-compressie van paginacontent en andere streams, op het maximale compressieniveau
  • Een xref-stream met objectstreams, die de meeste objecten in gecomprimeerde containers stopt (ISO 32000-1 7.5.7 en 7.5.8); elke container bevat maximaal 250 objecten in plaats van 100, want minder, grotere containers comprimeren beter. Een via ConfigureAdaptiveObjectStreamPacking ingestelde limiet blijft staan
  • Fontsubsetting, met compacte fontsubsets, zodat elk ingesloten font alleen de glyfen bewaart die het document toont

Objectstreams vereisen PDF 1.5. Is Version ouder, dan wordt die verhoogd naar PDF 1.5 tenzij de versie is vastgezet; PDF/A-1-uitvoer houdt zijn klassieke kruisverwijzingstabel, zoals de standaard voorschrijft

 

CompressDocument verandert de instellingen die je koos niet. EndDoc herstelt de waarden van Compression, CompressionLevel, UseXRefStream, UseObjectStreams, EnableFontSubsetting, CompactFontSubsetting, de limiet van objecten per container en de versieverhoging zodra het document is weggeschreven, dus het volgende document zonder CompressDocument wordt geschreven zoals daarvoor. Afbeeldingen behouden hun eigen compressie-instellingen; er wordt niets opnieuw gesampled of met verlies gecomprimeerd

 

De eigenschap staat standaard uit. Een document van drie pagina's met gemengde Engelse en Chinese tekst in Arial en SimSun krimpt van zo'n 10 MB naar zo'n 20 KB, grotendeels dankzij fontsubsetting. De keerzijde is dat de uitvoer later lastiger te bewerken is: subsetfonts kunnen tekens niet tonen die het document niet gebruikt, en gecomprimeerde objectstreams zijn niet leesbaar in een teksteditor

 

Voorbeeld:

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

 

Zie ook: CompactFontSubsetting, EnableFontSubsetting, CompressLoadedDocument