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
| Feld | Standard | Bedeutung |
|---|---|---|
MinimumSavingsBytes | 1 | Minimale erforderliche Verringerung der kodierten Stream-Größe, bevor ein Kandidat übernommen wird |
EnforceSignaturePermissions | True | Lehnt jedes Rewrite ab, wenn das Dokument ein Signaturfeld enthält |
IncludeFormXObjects | True | Verfolgt aufgerufene verschachtelte Form XObjects |
IncludeAnnotationAppearances | True | Verfolgt 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;