Redigerbare diagnosticeringsdokumenter og reparation
SaveLoadedDocumentDiagnostic producerer deterministisk, udpakket output til inspektion og kontrolleret tekstredigering, mens RepairDiagnosticDocument gør den redigerede fil til en strukturelt gyldig PDF igen
Round-trip-arbejdsgang
- Indlæs et dokument, og kald
SaveLoadedDocumentDiagnostic - Redigér objektordbøger eller ukomprimerede strømbytes uden at forsøge manuelt at vedligeholde
/Length, xref-rækker ellerstartxref - Kald
RepairDiagnosticDocumentmed afgrænsede indstillinger - Undersøg
THPDFDiagnosticRepairReport, og brug kun det reparerede mål, når metoden returnererTrue
Reparationskontrakt
- Kilden skal begynde med en PDF-header og have markøren
%QDF-1.0, som HotPDF udsender - Validerede indirekte objekter kopieres i fysisk rækkefølge uden at genkode strenge, ordbøger eller strømdata
- Direkte, indirekte, manglende og forældede
/Length-værdier for strømme erstattes med den målte datalængde - En klassisk xref-tabel, kanonisk trailer og nøjagtig
startxref-forskydning genopbygges fra målte outputpositioner - Traileren bevarer gyldige
/Info-,/ID- og/Encrypt-værdier og binder/Roottil det eneste validerede Catalog - Målet skrives gennem en midlertidig søskendefil og erstatter den anmodede sti først, når alle kontroller lykkes
Streng afvisning
Reparationen fejler lukket for dublerede objektnumre, flere eller manglende Catalog-objekter, ødelagte trailerreferencer, bytes uden for kommentarer mellem objekter, ugyldig objektgrammatik, objekt- eller inputgrænser, klassiske xref-forskydninger bredere end ti cifre og strenge valideringsfejl ved genindlæsning
Markører i validerede objekter springes over, så objektlignende tekst i strenge og kodede strømdata ikke bliver en xref-post
Afgrænset ydeevne
Scanneren læser vinduer på 1 MiB med et kort overlap, kopierer objektområder direkte mellem filstrømme og beholder kun validerede objektmetadata samt afgrænsede ordbogsprober
MaxInputBytes, MaxObjectCount og MaxObjectNumber begrænser scanning, bevarede metadata og udsendte xref-rækker, før output publiceres
Pascal-eksempel
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;