Izmenljivi dijagnostički dokumenti i popravka
SaveLoadedDocumentDiagnostic proizvodi deterministički, raspakovan izlaz za pregled i kontrolisano uređivanje teksta, dok RepairDiagnosticDocument vraća izmenjeni fajl nazad u strukturno važeći PDF
Tok rada povratnog puta
- Učitajte dokument i pozovite
SaveLoadedDocumentDiagnostic - Izmenite rečnike objekata ili nekompresovane bajtove tokova bez pokušaja ručnog održavanja
/Length, xref redova ilistartxref - Pozovite
RepairDiagnosticDocumentsa ograničenim opcijama - Pregledajte
THPDFDiagnosticRepairReporti koristite popravljeno odredište samo kada metod vraćaTrue
Ugovor o popravci
- Izvor mora da počne PDF zaglavljem i da nosi
%QDF-1.0marker koji emituje HotPDF - Validirani indirektni objekti kopiraju se po fizičkom redu bez ponovnog kodiranja stringa, rečnika ili sadržaja tokova
- Direktne, indirektne, nedostajuće i zastarele vrednosti
/Lengthtokova zamenjuju se izmerenom dužinom sadržaja - Klasična xref tabela, kanonski trailer i tačan
startxrefpomak ponovo se grade iz izmerenih pozicija izlaza - Trailer čuva važeće
/Info,/IDi/Encryptvrednosti i vezuje/Rootza jedini validirani Catalog - Cilj se upisuje kroz sestrinsku privremenu datoteku i zamenjuje traženu putanju samo nakon što sve provere uspeju
Strogo odbijanje
Popravka ne uspeva zatvoreno za duplikatne brojeve objekata, višestruke ili nedostajuće Catalog objekte, pokvarene trailer reference, nekomentarne bajtove između objekata, nevažeću gramatiku objekata, ograničenja objekta ili ulaza, klasične xref pomake šire od deset cifara i stroge neuspehe validacije ponovnog učitavanja
Markeri unutar validiranih objekata se preskaču, tako da tekst nalik objektu u stringovima i kodirani sadržaji tokova ne postaju xref unos
Ograničene performanse
Skener čita prozore od 1 MiB sa kratkim prenosom, kopira opsege objekata direktno između datotečnih tokova i zadržava samo validirane metapodatke objekata plus ograničene sonde rečnika
MaxInputBytes, MaxObjectCount i MaxObjectNumber ograničavaju skeniranje, zadržane metapodatke i emitovane xref redove pre objavljivanja izlaza
Pascal primer
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;