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
| Options | Eine bitweise Kombination von Optionskonstanten für die Ressourcendeduplizierung |
|---|---|
| Stats | Empfängt Zähler für Scan, Hashing, Vergleich, Referenz, Nutzdaten, Kategorie und verwaiste Objekte |
Ressourcentypoptionen
| PDF_RESOURCE_DEDUP_IMAGES | Schließt Image-XObjects, explizite Bildmasken, Softmask-Bilder, alternative Bilder und Miniaturbilder ein |
|---|---|
| PDF_RESOURCE_DEDUP_FORMS | Schließt Form-XObjects wie wiederverwendbare Seitengrafiken, Anmerkungsdarstellungen und Transparenzgruppen ein |
| PDF_RESOURCE_DEDUP_PATTERNS | Schließt streambasierte Kachelmuster ein |
| PDF_RESOURCE_DEDUP_SHADINGS | Schließt streambasierte Mesh-Shadings ein |
| PDF_RESOURCE_DEDUP_FUNCTIONS | Bezieht Streams abgetasteter Funktionen ein |
| PDF_RESOURCE_DEDUP_ICC_PROFILES | Schließt ICC-Profilstreams ein, die von ICCBased-Farbräumen oder Output Intents referenziert werden |
| PDF_RESOURCE_DEDUP_FONT_PROGRAMS | Schließt über FontFile, FontFile2 oder FontFile3 referenzierte Streams ein |
| PDF_RESOURCE_DEDUP_CMAPS | Schließt CMap- und ToUnicode-Streams ein |
| PDF_RESOURCE_DEDUP_TYPE3_CHARPROCS | Schließt Streams für Type-3-Glyphenprozeduren ein |
| PDF_RESOURCE_DEDUP_EMBEDDED_FILES | Schließt Streams eingebetteter Dateien ein |
| PDF_RESOURCE_DEDUP_METADATA | Schließt Metadatenstreams ein |
| PDF_RESOURCE_DEDUP_POSTSCRIPT | Schließt PostScript-XObjects ein |
| PDF_RESOURCE_DEDUP_ALL_TYPES | Kombiniert alle zwölf Ressourcentyp-Flags |
Vorgangsoptionen
| PDF_RESOURCE_DEDUP_DRY_RUN | Meldet doppelte Streams und Referenzen, ohne den Objektgraphen zu verändern oder Objekte zu bereinigen |
|---|---|
| PDF_RESOURCE_DEDUP_GARBAGE_COLLECT | Führt nach der Umleitung von Referenzen eine Mark-and-Sweep-Bereinigung aus |
| PDF_RESOURCE_DEDUP_DEFAULT | Kombiniert alle Ressourcentypen mit der Speicherbereinigung |
Rückgabewerte
| Positive value | Die Anzahl der doppelten indirekten Streams, die zusammengeführt oder von einem Probelauf gemeldet wurden |
|---|---|
| 0 | Es 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