Documentos de diagnóstico editables y reparación

SaveLoadedDocumentDiagnostic produce una salida determinista y sin empaquetar 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 trabajo de ida y vuelta

  1. Cargue un documento y llame a SaveLoadedDocumentDiagnostic
  2. Edite los diccionarios de objetos o los bytes de flujo sin comprimir sin intentar mantener /Length, las filas xref o startxref manualmente
  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 de comentario entre objetos, gramática de objeto no válida, límites de objeto o entrada, desplazamientos xref clásicos de más de diez dígitos y fallos de validación estricta al recargar

Los marcadores dentro de objetos validados se omiten, de modo que el texto similar a objetos en cadenas y cargas útiles de flujo codificadas no se convierte en una entrada xref

Rendimiento acotado

El escáner lee ventanas de 1 MiB con un acarreo corto, copia los rangos de objetos directamente entre flujos de archivo y conserva solo los metadatos de objeto validados más sondas de diccionario acotadas

MaxInputBytes, MaxObjectCount y MaxObjectNumber limitan el escaneo, los metadatos conservados y las filas 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