Bearbeitbare Diagnosedokumente und Reparatur
SaveLoadedDocumentDiagnostic erzeugt deterministische, entpackte Ausgabe zur Prüfung und kontrollierten Textbearbeitung, während RepairDiagnosticDocument die bearbeitete Datei wieder in ein strukturell gültiges PDF überführt
Round-Trip-Arbeitsablauf
- Ein Dokument laden und
SaveLoadedDocumentDiagnosticaufrufen - Objektwörterbücher oder unkomprimierte Stream-Bytes bearbeiten, ohne
/Length, xref-Zeilen oderstartxrefmanuell pflegen zu müssen RepairDiagnosticDocumentmit begrenzten Optionen aufrufenTHPDFDiagnosticRepairReportprüfen und das reparierte Ziel nur verwenden, wenn die MethodeTruezurückgibt
Reparaturvertrag
- Die Quelle muss mit einem PDF-Header beginnen und die von HotPDF ausgegebene Markierung
%QDF-1.0enthalten - Validierte indirekte Objekte werden in physischer Reihenfolge kopiert, ohne Zeichenfolgen, Wörterbücher oder Stream-Nutzdaten neu zu kodieren
- Direkte, indirekte, fehlende und veraltete
/Length-Werte von Streams werden durch die gemessene Nutzdatenlänge ersetzt - Eine klassische xref-Tabelle, ein kanonischer Trailer und der exakte
startxref-Offset werden aus gemessenen Ausgabepositionen neu erstellt - Der Trailer bewahrt gültige Werte für
/Info,/IDund/Encryptund bindet/Rootan den einzigen validierten Catalog - Das Ziel wird über eine temporäre Datei im selben Verzeichnis geschrieben und ersetzt den angeforderten Pfad erst nach erfolgreicher Prüfung
Strenge Zurückweisung
Die Reparatur schlägt geschlossen fehl bei doppelten Objektnummern, mehreren oder fehlenden Catalog-Objekten, defekten Trailer-Referenzen, Nicht-Kommentar-Bytes zwischen Objekten, ungültiger Objektgrammatik, Objekt- oder Eingabegrenzen, klassischen xref-Offsets mit mehr als zehn Ziffern und Fehlern bei der strengen Neuladungsvalidierung
Markierungen in validierten Objekten werden übersprungen, sodass objektähnlicher Text in Zeichenfolgen und kodierten Stream-Nutzdaten keinen xref-Eintrag erzeugt
Begrenzte Leistung
Der Scanner liest 1-MiB-Fenster mit einem kurzen Übertrag, kopiert Objektbereiche direkt zwischen Dateistreams und behält nur validierte Objektmetadaten sowie begrenzte Wörterbuchproben
MaxInputBytes, MaxObjectCount und MaxObjectNumber begrenzen Prüfung, gespeicherte Metadaten und ausgegebene xref-Zeilen vor der Veröffentlichung der Ausgabe
Pascal-Beispiel
var
Options: THPDFDiagnosticRepairOptions;
Report: THPDFDiagnosticRepairReport;
begin
Options := THPDFDiagnosticRepairOptions.Default;
Options.MaxInputBytes := Int64(16) * 1024 * 1024 * 1024;
if not THotPDF.RepairDiagnosticDocument(
'edited-diagnostic.pdf',
'repaired.pdf',
Options,
Report
) then
raise Exception.Create(string(Report.Diagnostic));
end;