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
- Carregue um documento e chame
SaveLoadedDocumentDiagnostic - Edite dicionários de objeto ou bytes de stream descompactados sem tentar manter
/Length, linhas xref oustartxrefmanualmente - Chame
RepairDiagnosticDocumentcom opções limitadas - Inspecione
THPDFDiagnosticRepairReporte use o destino reparado apenas quando o método retornarTrue
Contrato de reparo
- A origem deve começar com um cabeçalho PDF e carregar o marcador
%QDF-1.0emitido pelo HotPDF - Objetos indiretos validados são copiados em ordem física sem recodificar strings, dicionários ou cargas de stream
- Valores de
/Lengthde stream diretos, indiretos, ausentes ou desatualizados são substituídos pelo tamanho real medido do payload - Uma tabela xref clássica, trailer canônico e deslocamento
startxrefexato são reconstruídos a partir de posições de saída medidas - O trailer preserva valores válidos de
/Info,/IDe/Encrypte vincula/Rootao único Catalog validado - O destino é gravado por meio de um arquivo temporário irmão e substitui o caminho solicitado apenas depois que todas as verificações têm sucesso
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;