Documentos de diagnóstico editables y reparación

SaveLoadedDocumentDiagnostic produce una salida determinista y sin comprimir para inspección y edición de texto controlada, mientras que RepairDiagnosticDocument convierte el archivo editado de vuelta en un PDF estructuralmente válido

Flujo de ida y vuelta

  1. Cargue un documento y llame a SaveLoadedDocumentDiagnostic
  2. Edite diccionarios de objetos o bytes de stream sin comprimir, sin intentar mantener manualmente /Length, las filas del xref ni startxref
  3. Llame a RepairDiagnosticDocument con opciones acotadas
  4. Inspeccione THPDFDiagnosticRepairReport y use el destino reparado solo cuando el método devuelva True

Contrato de reparación

Rechazo estricto

La reparación falla de forma cerrada ante números de objeto duplicados, objetos Catalog múltiples o ausentes, referencias de trailer rotas, bytes que no son comentarios entre objetos, gramática de objeto inválida, límites de objetos o de entrada, offsets de xref clásico de más de diez dígitos y fallos de validación de recarga estricta

Los marcadores dentro de objetos validados se saltan, así que el texto con aspecto de objeto dentro de cadenas y payloads de stream codificados no se convierte en una entrada del xref

Rendimiento acotado

El scanner lee ventanas de 1 MiB con un carry corto, copia rangos de objetos directamente entre file streams, y solo retiene metadatos de objetos validados más sondas de diccionario acotadas

MaxInputBytes, MaxObjectCount y MaxObjectNumber acotan el escaneo, los metadatos retenidos y las filas de xref emitidas antes de publicar la salida

Ejemplo en 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 relacionada