Documenti Diagnostici Modificabili e Riparazione
SaveLoadedDocumentDiagnostic produce output deterministico e decompresso per ispezione e modifica testuale controllata, mentre RepairDiagnosticDocument trasforma il file modificato di nuovo in un PDF strutturalmente valido
Workflow di round-trip
- Caricare un documento e chiamare
SaveLoadedDocumentDiagnostic - Modificare i dizionari degli oggetti o i byte degli stream non compressi senza cercare di mantenere a mano
/Length, le righe xref ostartxref - Chiamare
RepairDiagnosticDocumentcon opzioni limitate - Esaminare
THPDFDiagnosticRepairReporte usare il target riparato solo quando il metodo restituisceTrue
Contratto di riparazione
- La sorgente deve iniziare con un header PDF e portare il marcatore
%QDF-1.0emesso da HotPDF - Gli oggetti indiretti validati vengono copiati in ordine fisico senza ricodificare stringhe, dizionari o payload degli stream
- I valori
/Lengthdegli stream diretti, indiretti, mancanti o obsoleti vengono sostituiti con la lunghezza misurata del payload - Una tabella xref classica, un trailer canonico e un offset
startxrefesatto vengono ricostruiti dalle posizioni misurate dell'output - Il trailer preserva i valori validi di
/Info,/IDe/Encrypte lega/Rootall'unico Catalog validato - Il target viene scritto tramite un file temporaneo fratello e sostituisce il percorso richiesto solo dopo che tutti i controlli hanno successo
Rifiuto rigoroso
La riparazione fallisce in modo sicuro in presenza di numeri di oggetto duplicati, oggetti Catalog multipli o mancanti, riferimenti di trailer rotti, byte non-commento tra oggetti, grammatica di oggetto non valida, limiti su oggetti o input, offset xref classici più larghi di dieci cifre e fallimenti della validazione strict al ricaricamento
I marcatori dentro gli oggetti validati vengono saltati, così il testo simile a oggetto dentro stringhe e payload di stream codificati non diventa una voce xref
Prestazioni limitate
Lo scanner legge finestre da 1 MiB con un breve carry, copia gli intervalli di oggetti direttamente tra file stream e conserva solo i metadati degli oggetti validati più probe di dizionario limitati
MaxInputBytes, MaxObjectCount e MaxObjectNumber limitano scansione, metadati conservati e righe xref emesse prima che l'output venga pubblicato
Esempio Pascal
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;