THotPDF.SubsetLoadedFonts Method

Przepisuje obsługiwane osadzone programy TrueType, OpenType CFF, surowe CFF i Type 1 tak, aby zachowały wyłącznie glify osiągalne z zawartości wczytanego dokumentu

Deklaracja

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

Osiągalność

Zawartość strony jest zawsze skanowana, łącznie z operatorami pokazywania tekstu i wyborami fontów lokalnymi względem resource

IncludeFormXObjects rekurencyjnie dołącza wywoływane Form XObjects z dziedziczonymi resource, z wykrywaniem cykli i ograniczoną głębokością zagnieżdżenia

IncludeAnnotationAppearances dołącza wyglądy normal, rollover i down oraz słowniki stanów, a po włączeniu śledzi także Form XObjects używane przez te wyglądy

Każdy kod znaku podąża za swoim zadeklarowanym kodowaniem, następnie za ewentualnym CMap Type0 i CIDToGIDMap, zanim dotrze do stabilnego osadzonego ID glifu; istniejące mapy CID i dane ToUnicode nie są ponownie numerowane

Złożone glify TrueType zachowują rekurencyjne domknięcie komponentów, a warstwy COLR v0 i zależności malowania glifów COLR v1 zachowują każdy przywołany kontur

Proste fonty Type 1 podążają za kodowaniem Standard, WinAnsi, MacRoman lub MacExpert oraz Differences, a następnie przepisują nieużywane CharStrings w danych PFB, binarnych rozdzielonych PDF lub heksadecymalnych PFA bez zmiany układu osadzonego streama

Opcje

PoleDomyślnieZnaczenie
MinimumSavingsBytes1Minimalna wymagana redukcja zakodowanego streama, zanim kandydat zostanie przyjęty
EnforceSignaturePermissionsTrueOdmowa każdego przepisywania, gdy dokument zawiera pole podpisu
IncludeFormXObjectsTrueŚledzenie wywoływanych zagnieżdżonych Form XObjects
IncludeAnnotationAppearancesTrueŚledzenie streamów wyglądów adnotacji i ich stanów

Wynik i bezpieczeństwo

Wartością zwracaną jest liczba przepisanych osadzonych programów fontów, a AInfo raportuje pokrycie skanowania, błędy mapowania lub dekodowania, użyte glify, oszczędność bajtów i konsekwencje dla podpisów

Program fontu pozostaje bez zmian bajt po bajcie, gdy dowolny osiągalny kod nie może zostać zmapowany, jego format jest nieobsługiwany, subsetyzacja zawodzi albo zakodowany kandydat nie osiąga progu oszczędności

Przepisywanie Type 1 kończy się bezpieczną odmową przy wielu binarnych segmentach PFB, niemożliwym do sparsowania jawnym kodowaniu prostego fontu, braku żądanego glifu lub nieobsługiwanym układzie CharString; nieznane wersje COLR oraz programy sfnt bez rozrzedzonych tabel konturów również pozostają bez zmian

Wszystkie kandydaci są analizowani przed mutacją, a domyślna polityka podpisów zwraca zero z ustawioną flagą RefusedBySignaturePolicy; jej wyłączenie pozwala na przepisywanie i ustawia SignaturesInvalidated, gdykolwiek zmienia się podpisany dokument

Przykład

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

Optymalizacja resource i obrazów