DeduplicateResources

Dokumentbearbeitung, Optimierung

Beschreibung

Sucht im gesamten geladenen Dokument bytegleiche indirekte Ressourcenstreams, leitet jeden Verweis auf einen deterministischen kanonischen Stream um und entfernt optional die doppelten indirekten Objekte

Gleichheit erfordert sowohl eine reihenfolgeunabhängige Signatur des vollständigen Streamwörterbuchs als auch eine exakte Übereinstimmung der codierten Streamnutzlast, sodass Bildmasken, Farbräume, Decode-Arrays, Zuordnungen zu optionalen Inhalten, Strukturkennungen, Metadaten, Filter und jeder semantische Wörterbucheintrag in die Entscheidung einfließen

Syntax

Delphi

Function TPDFlib.DeduplicateResources(
  Options: Integer= PDF_RESOURCE_DEDUP_DEFAULT): Integer; Overload;
Function TPDFlib.DeduplicateResources(Options: Integer;
  Out Stats: TPDFlibResourceDedupStats): Integer; Overload;

Parameter

OptionsEine bitweise Kombination von Optionskonstanten für die Ressourcendeduplizierung
StatsEmpfängt Zähler für Scan, Hashing, Vergleich, Referenz, Nutzdaten, Kategorie und verwaiste Objekte

Ressourcentypoptionen

PDF_RESOURCE_DEDUP_IMAGESSchließt Image-XObjects, explizite Bildmasken, Softmask-Bilder, alternative Bilder und Miniaturbilder ein
PDF_RESOURCE_DEDUP_FORMSSchließt Form-XObjects wie wiederverwendbare Seitengrafiken, Anmerkungsdarstellungen und Transparenzgruppen ein
PDF_RESOURCE_DEDUP_PATTERNSSchließt streambasierte Kachelmuster ein
PDF_RESOURCE_DEDUP_SHADINGSSchließt streambasierte Mesh-Shadings ein
PDF_RESOURCE_DEDUP_FUNCTIONSBezieht Streams abgetasteter Funktionen ein
PDF_RESOURCE_DEDUP_ICC_PROFILESSchließt ICC-Profilstreams ein, die von ICCBased-Farbräumen oder Output Intents referenziert werden
PDF_RESOURCE_DEDUP_FONT_PROGRAMSSchließt über FontFile, FontFile2 oder FontFile3 referenzierte Streams ein
PDF_RESOURCE_DEDUP_CMAPSSchließt CMap- und ToUnicode-Streams ein
PDF_RESOURCE_DEDUP_TYPE3_CHARPROCSSchließt Streams für Type-3-Glyphenprozeduren ein
PDF_RESOURCE_DEDUP_EMBEDDED_FILESSchließt Streams eingebetteter Dateien ein
PDF_RESOURCE_DEDUP_METADATASchließt Metadatenstreams ein
PDF_RESOURCE_DEDUP_POSTSCRIPTSchließt PostScript-XObjects ein
PDF_RESOURCE_DEDUP_ALL_TYPESKombiniert alle zwölf Ressourcentyp-Flags

Vorgangsoptionen

PDF_RESOURCE_DEDUP_DRY_RUNMeldet doppelte Streams und Referenzen, ohne den Objektgraphen zu verändern oder Objekte zu bereinigen
PDF_RESOURCE_DEDUP_GARBAGE_COLLECTFührt nach der Umleitung von Referenzen eine Mark-and-Sweep-Bereinigung aus
PDF_RESOURCE_DEDUP_DEFAULTKombiniert alle Ressourcentypen mit der Speicherbereinigung

Rückgabewerte

Positive valueDie Anzahl der doppelten indirekten Streams, die zusammengeführt oder von einem Probelauf gemeldet wurden
0Es wurde kein geeigneter doppelter Stream gefunden oder es ist kein Dokument geladen

Anmerkungen

Die niedrigste Objektnummer und Generation jeder Gruppe exakter Äquivalenz wird zum kanonischen Stream, wodurch wiederholte Ausführungen deterministisch sind

Die Reihenfolge der Wörterbuchschlüssel beeinflusst die Gleichheit nicht, wohl aber jeder semantische Schlüssel und Wert einschließlich der Identität indirekter Verweise; ein numerischer Length-Eintrag auf oberster Ebene wird anhand seines aufgelösten Werts verglichen, sodass äquivalente direkte und indirekte Längenformen eine Ressource gemeinsam verwenden können

Ressourcen mit gleichem dekodiertem Inhalt, aber unterschiedlichen Filtern oder kodierten Bytes bleiben ebenso getrennt wie Ressourcen, deren Wörterbücher auf unterschiedliche verschachtelte Objekte verweisen

Alle Kandidatennutzdaten werden einmal mit SHA-256 gehasht; eine bytegenaue Bestätigung erfolgt nur in einem passenden Hash- und Wörterbuchsignatur-Bucket

Die Methode arbeitet mit indirekten Streams, da ISO 32000 verlangt, dass Streams indirekte Objekte sind, und gemeinsam verwendete Ressourcen durch indirekte Referenzen dargestellt werden

Verwenden Sie nach der Dokumentbearbeitung und vor einer vollständigen Speicherung die Standardeinstellung, um Bytes doppelter Objekte sofort zurückzugewinnen

Lassen Sie bei einem inkrementellen Speichern PDF_RESOURCE_DEDUP_GARBAGE_COLLECT aus, wenn alte Revisionen physisch unverändert bleiben müssen; umgeleitete Verweise reduzieren weiterhin Duplikate in der neuen Revision, können jedoch keine Bytes aus früheren Revisionen entfernen

Beispiel

var
  Stats: TPDFlibResourceDedupStats;
  Merged: Integer;
begin
  Merged:= PDF.DeduplicateResources(
    PDF_RESOURCE_DEDUP_DEFAULT, Stats);
  PDF.SaveToFile('optimised.pdf');
end;

Siehe auch

TPDFlibResourceDedupStats, PurgeUnusedResources, GarbageCollectObjects