Diagnostická oprava dokumentu
Diagnostická oprava analyzuje načtené PDF, určí bezpečné opravitelné nesrovnalosti a vrátí strukturovaný report změn SaveLoadedDocumentDiagnostic produkuje deterministický, rozbalený výstup pro inspekci a kontrolovanou textovou editaci; opačným směrem, zpět k plnohodnotnému PDF, funguje RepairDiagnosticDocument
Pracovní postup tam a zpět
- Načtěte dokument a zavolejte
SaveLoadedDocumentDiagnostic - Upravujte slovníky objektů nebo nekomprimované bajty streamů, aniž byste ručně udržovali
/Length, řádky xref nebostartxref - Zavolejte
RepairDiagnosticDocuments omezenými volbami - Prohlédněte
THPDFDiagnosticRepairReporta opravený cíl použijte jen tehdy, když metoda vrátíTrue
Smlouva o opravě
- Zdroj musí začínat hlavičkou PDF a nést značku
%QDF-1.0emitovanou HotPDF - Validované nepřímé objekty se kopírují ve fyzickém pořadí bez překódování řetězců, slovníků či payloadů streamů
- Přímé, nepřímé, chybějící i zastaralé hodnoty
/Lengthstreamů se nahradí změřenou délkou payloadu - Klasická tabulka xref, kanonický trailer a přesný offset
startxrefse znovu sestaví ze změřených výstupních pozic - Trailer zachová platné hodnoty
/Info,/IDa/Encrypta sváže/Roots jediným validovaným Catalog - Cíl se zapisuje přes sourozenecký dočasný soubor a požadovanou cestu nahradí až poté, co všechny kontroly uspějí
Politika oprav
Volající vybírá omezenou politiku oprav. HotPDF neprovádí destruktivní změny bez explicitně povolené akce a každou změnu eviduje
Neplatné nebo nejednoznačné objekty se hlásí místo tichého přepsání
Report
Report uvádí stav, nalezené problémy, provedené akce a diagnostiku pro audit nebo rozhodnutí aplikace
MaxInputBytes, MaxObjectCount a MaxObjectNumber omezí skenování, uchovaná metadata i emitované řádky xref dřív, než se výstup zveřejní
Příklad v Pascalu
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;