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
- Cargue un documento y llame a
SaveLoadedDocumentDiagnostic - Edite los diccionarios de objetos o los bytes de flujo sin comprimir sin intentar mantener
/Length, las filas xref ostartxrefmanualmente - Llame a
RepairDiagnosticDocumentcon opciones acotadas - Inspeccione
THPDFDiagnosticRepairReporty use el destino reparado solo cuando el método devuelvaTrue
Contrato de reparación
- El origen debe comenzar con una cabecera PDF y llevar el marcador
%QDF-1.0emitido por HotPDF - Los objetos indirectos validados se copian en orden físico sin recodificar cadenas, diccionarios ni cargas útiles de flujo
- Los valores de
/Lengthde flujo directos, indirectos, ausentes y obsoletos se reemplazan con la longitud de carga útil medida - Una tabla xref clásica, un trailer canónico y un desplazamiento
startxrefexacto se reconstruyen a partir de las posiciones de salida medidas - El trailer conserva los valores válidos de
/Info,/IDy/Encrypty vincula/Rootal único Catalog validado - El destino se escribe mediante un archivo temporal hermano y reemplaza la ruta solicitada solo después de que todas las comprobaciones tengan éxito
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;