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

  1. Caricare un documento e chiamare SaveLoadedDocumentDiagnostic
  2. Modificare i dizionari degli oggetti o i byte degli stream non compressi senza cercare di mantenere a mano /Length, le righe xref o startxref
  3. Chiamare RepairDiagnosticDocument con opzioni limitate
  4. Esaminare THPDFDiagnosticRepairReport e usare il target riparato solo quando il metodo restituisce True

Contratto di riparazione

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;

API correlate