Editable Diagnostic Documents and Repair
SaveLoadedDocumentDiagnostic produit une sortie déterministe non compressée pour inspection et édition de texte contrôlée, tandis que RepairDiagnosticDocument retransforme le fichier édité en un PDF structurellement valide
Flux de travail aller-retour
- Charger un document et appeler
SaveLoadedDocumentDiagnostic - Modifier les dictionnaires d'objets ou les octets de flux non compressés sans tenter de maintenir manuellement
/Length, les lignes xref oustartxref - Appeler
RepairDiagnosticDocumentavec des options bornées - Inspecter
THPDFDiagnosticRepairReportet n'utiliser la cible réparée que lorsque la méthode renvoieTrue
Contrat de réparation
- La source doit commencer par un en-tête PDF et porter le marqueur
%QDF-1.0émis par HotPDF - Les objets indirects validés sont copiés dans l'ordre physique sans ré-encoder les chaînes, dictionnaires ou charges utiles de flux
- Les valeurs
/Lengthde flux directes, indirectes, manquantes ou obsolètes sont remplacées par la longueur de charge utile mesurée - Une table xref classique, un en-tête de fichier canonique et un décalage
startxrefexact sont reconstruits à partir des positions de sortie mesurées - L'en-tête de fichier préserve les valeurs valides
/Info,/IDet/Encryptet lie/Rootau seul Catalog validé - La cible est écrite via un fichier temporaire frère et ne remplace le chemin demandé qu'après la réussite de toutes les vérifications
Rejet strict
La réparation échoue en fail-closed pour les numéros d'objets dupliqués, les objets Catalog multiples ou manquants, les références d'en-tête de fichier cassées, les octets non commentés entre les objets, la grammaire d'objet invalide, les limites d'objets ou d'entrée, les décalages xref classiques plus larges que dix chiffres et les échecs de validation de rechargement strict
Les marqueurs à l'intérieur des objets validés sont ignorés, de sorte que le texte semblable à un objet dans les chaînes et les charges utiles encodées ne devient pas une entrée xref
Performance bornée
Le scanneur lit des fenêtres de 1 Mio avec une courte retenue, copie les plages d'objets directement entre les flux de fichiers, et ne conserve que les métadonnées d'objets validées ainsi que les sondes de dictionnaires bornées
MaxInputBytes, MaxObjectCount et MaxObjectNumber plafonnent le balayage, les métadonnées conservées et les lignes xref émises avant la publication de la sortie
Exemple 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;