THotPDF.SubsetLoadedFonts-Methode

Schreibt unterstützte eingebettete TrueType-, OpenType-CFF-, rohe CFF- und Type-1-Programme so um, dass sie nur Glyphen behalten, die aus dem Inhalt des geladenen Dokuments erreichbar sind

Deklaration

function SubsetLoadedFonts(
    const Options: THPDFLoadedFontSubsetOptions;
    out AInfo: THPDFLoadedFontSubsetInfo): Integer; overload;
function SubsetLoadedFonts(
    out AInfo: THPDFLoadedFontSubsetInfo): Integer; overload;

Erreichbarkeit

Seiteninhalt wird immer gescannt, einschließlich textanzeigender Operatoren und ressourcenlokaler Schriftauswahlen

IncludeFormXObjects schließt aufgerufene Form XObjects mit geerbten Ressourcen rekursiv ein, mit Zykluserkennung und begrenzter Verschachtelungstiefe

IncludeAnnotationAppearances schließt normale, Rollover- und Down-Appearances sowie State-Dictionarys ein und folgt bei Aktivierung auch den von diesen Appearances verwendeten Form XObjects

Jeder Zeichencode folgt seiner deklarierten Encodierung, dann jedem Type0-CMap und CIDToGIDMap, bevor er die stabile eingebettete Glyph-ID erreicht; vorhandene CID-Maps und ToUnicode-Daten werden nicht umnummeriert

TrueType-Kompositglyphen behalten ihren rekursiven Komponenten-Abschluss, während COLR-v0-Layer und COLR-v1-Glyph-Paint-Abhängigkeiten jede referenzierte Outline behalten

Type-1-Simple-Fonts folgen der Standard-, WinAnsi-, MacRoman- oder MacExpert-Encodierung samt Differences und schreiben anschließend ungenutzte CharStrings in PFB-, PDF-split-binären oder hexadezimalen PFA-Daten um, ohne das Layout des eingebetteten Streams zu verändern

Optionen

FeldStandardBedeutung
MinimumSavingsBytes1Minimale erforderliche Verringerung der kodierten Stream-Größe, bevor ein Kandidat übernommen wird
EnforceSignaturePermissionsTrueLehnt jedes Rewrite ab, wenn das Dokument ein Signaturfeld enthält
IncludeFormXObjectsTrueVerfolgt aufgerufene verschachtelte Form XObjects
IncludeAnnotationAppearancesTrueVerfolgt Annotations-Appearance-Streams und -States

Ergebnis und Sicherheit

Der Rückgabewert ist die Anzahl umgeschriebener eingebetteter Font-Programme, während AInfo Scan-Abdeckung, Mapping- oder Dekodierfehler, verwendete Glyphen, Byte-Einsparungen und Signaturfolgen meldet

Ein Font-Programm bleibt bytefür-byte unverändert, wenn ein erreichbarer Code nicht gemappt werden kann, sein Format nicht unterstützt wird, das Subsetting fehlschlägt oder der kodierte Kandidat die Einsparungsschwelle verfehlt

Das Type-1-Rewrite schlägt kontrolliert fehl bei mehreren binären PFB-Segmenten, einer nicht parsbaren expliziten Simple-Font-Encodierung, einem fehlenden angeforderten Glyph-Namen oder einem nicht unterstützten CharString-Layout; unbekannte COLR-Versionen und sfnt-Programme ohne Sparse-Outline-Tabellen bleiben ebenfalls unverändert

Alle Kandidaten werden vor der Mutation analysiert, und die Standard-Signatur-Policy liefert null zurück mit gesetztem RefusedBySignaturePolicy; das Deaktivieren der Policy erlaubt Rewrites und setzt SignaturesInvalidated, sobald ein signiertes Dokument sich ändert

Beispiel

var
  Info: THPDFLoadedFontSubsetInfo;
begin
  PDF.LoadFromFile('input.pdf');
  if PDF.SubsetLoadedFonts(Info) > 0 then
    PDF.SaveToFile('subset.pdf');
end;

Ressourcen- und Bildoptimierung