Documentos de diagnóstico editáveis e reparo

SaveLoadedDocumentDiagnostic produz saída determinística e descompactada para inspeção e edição de texto controlada, enquanto RepairDiagnosticDocument transforma o arquivo editado de volta em um PDF estruturalmente válido

Fluxo de trabalho de ida e volta

  1. Carregue um documento e chame SaveLoadedDocumentDiagnostic
  2. Edite dicionários de objeto ou bytes de stream descompactados sem tentar manter /Length, linhas xref ou startxref manualmente
  3. Chame RepairDiagnosticDocument com opções limitadas
  4. Inspecione THPDFDiagnosticRepairReport e use o destino reparado apenas quando o método retornar True

Contrato de reparo

Rejeição estrita

O reparo falha de forma segura para números de objeto duplicados, objetos Catalog múltiplos ou ausentes, referências de trailer quebradas, bytes sem comentário entre objetos, gramática de objeto inválida, limites de objeto ou entrada, deslocamentos xref clássicos mais largos que dez dígitos e falhas estritas de validação de recarregamento

Marcadores dentro de objetos validados são ignorados, de modo que texto semelhante a objeto em strings e cargas de stream codificadas não se torna uma entrada xref

Desempenho limitado

O scanner lê janelas de 1 MiB com um pequeno transporte, copia intervalos de objeto diretamente entre streams de arquivo e retém apenas metadados de objeto validados mais sondas de dicionário limitadas

MaxInputBytes, MaxObjectCount e MaxObjectNumber limitam a varredura, os metadados retidos e as linhas xref emitidas antes que a saída seja publicada

Exemplo em 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