Recettes de préflight

Ce cahier de recettes regroupe les API et les démonstrations de préflight en recettes orientées tâche. Utilisez la référence API lorsque vous avez besoin des signatures exactes; utilisez cette page lorsque vous cherchez une voie praticable pour une application, un script de build ou un job CI

Choisir un format de sortie

var
  PDF: THotPDF;
begin
  PDF := THotPDF.Create(nil);
  try
    PDF.SavePreflightReport('Input.pdf', 'Input.preflight.txt');
    PDF.SavePreflightReport('Input.pdf', 'Input.preflight.json', '', pfJSON);
    PDF.SavePreflightReport('Input.pdf', 'Input.preflight.html', '', pfHTML);
    PDF.SavePreflightReport('Input.pdf', 'Input.preflight.csv', '', pfCSV);
  finally
    PDF.Free;
  end;
end;

La sortie texte est stable octet à octet et se prête bien aux diffs. JSON convient à l’ingestion dans des pipelines. HTML est autonome et peut être ouvert directement ou ruleId namespacé plus une location structurée avec portée logique, chemin, clé PDF et coordonnées exactes d’objet, de page ou d’octet lorsqu’elles sont disponibles. Le HTML affiche enregistré comme artefact CI. CSV utilise des colonnes stables pour les workflows de tableur et de rapports par lot

Valider des documents PDF/VT

var
  PDF: THotPDF;
  Report: AnsiString;
begin
  PDF := THotPDF.Create(nil);
  try
    if not PDF.ValidatePDFVT('Input.pdf', Report) then
      WriteLn(string(Report));
  finally
    PDF.Free;
  end;
end;

Le rapport PDF/VT se concentre sur l’identification ISO 16612-2 et la structure de parties de document : GTS_PDFVTVersion XMP sous forme de texte d’élément ou d’attribut RDF, correspondance des dates de modification, marqueur de base PDF/X, output intent, DPartRoot, DPartRootNode, NodeNameList et couverture DPart au niveau page.

Appliquer un profil

var
  PDF: THotPDF;
  Report: AnsiString;
begin
  PDF := THotPDF.Create(nil);
  try
    Report := PDF.CreatePreflightReportWithProfile(
      'Input.pdf', '', 'project-preflight.ini', pfJSON);
  finally
    PDF.Free;
  end;
end;

Les profils désactivent des vérifications nommées, des avertissements ou tous les conseils. Utilisez ValidatePreflightProfile avant d’appliquer un profil rédigé par l’utilisateur lorsque l’échec contrôlé est plus important que l’ignorance silencieuse d’un nom obsolète

Créer un profil réutilisable à partir d’un préréglage

var
  PDF: THotPDF;
  Profile: THPDFPreflightProfile;
begin
  PDF := THotPDF.Create(nil);
  try
    Profile := PDF.GetBuiltInPreflightProfile('compact');
    Profile.DisableWarnings := 'OpenAction,JavaScript,URIAction';
    PDF.SavePreflightProfile(Profile, 'compact-no-actions.ini');
  finally
    PDF.Free;
  end;
end;

Utilisez MergePreflightProfiles pour combiner un préréglage avec des noms spécifiques au projet. Utilisez DiffPreflightProfiles pour examiner la dérive des profils avant de mettre à jour un fichier de configuration partagé.

Archiver le rapport avec le PDF

PDF.EmbedPreflightReportInPDF('Input.pdf', 'Input-with-report.pdf');
PDF.EmbedPreflightReportAsXMP('Input.pdf', 'Input-with-xmp-report.pdf');

Le chemin d’embed texte ajoute un bloc de commentaire lisible après le marqueur EOF final. Le chemin XMP ajoute une charge utile en forme RDF pour les flux d’archivage qui scannent les paquets de métadonnées.

Valider un rapport incorporé

var
  OriginalReport: AnsiString;
  CurrentReport: AnsiString;
begin
  if not PDF.LoadAndValidatePreflightReport(
    'Input-with-report.pdf', OriginalReport, CurrentReport) then
    WriteLn(string(PDF.ComparePreflightReports(OriginalReport, CurrentReport)));
end;

Le chemin de validation compare l’empreinte embarquée à une exécution de preflight fraîche sur les octets sources. Le helper de diff est orienté ligne et calibré pour les rapports preflight HotPDF.

Exécuter une passe de réparation conservatrice

var
  RepairsApplied: AnsiString;
begin
  if PDF.RepairPDFFromPreflightReport(
    'Broken.pdf', 'Broken-repaired.pdf', RepairsApplied) then
    WriteLn(string(RepairsApplied));
end;

Le helper de réparation reste volontairement étroit. Il gère les octets résiduels après le marqueur EOF final et les marqueurs EOF manquants, mais ne reconstruit pas les tables de références croisées ni les flux.

Agréger plusieurs rapports

Reports[0] := PDF.CreatePreflightReport('A.pdf');
Reports[1] := PDF.CreatePreflightReport('B.pdf');
Summary := PDF.AggregatePreflightReports(Reports);

La sortie agrégée affiche une ligne d’état par PDF ainsi que les totaux des rapports traités, des échecs et des avertissements. Elle est utile lorsqu’un pipeline a besoin d’un seul récapitulatif même si les rapports détaillés sont conservés par fichier d’entrée

Utiliser l’outil en ligne de commande

HotPDFPreflight Input.pdf -f json -o reports
HotPDFPreflight Input.pdf --pdfvt -o reports
HotPDFPreflight C:\Archive -r --preset compact -f text -o reports --aggregate reports\Aggregate.txt
HotPDFPreflight C:\Archive -r --profile project-preflight.ini -f html -o reports

La CLI reflète le flux de travail de la bibliothèque : entrée fichier ou répertoire récursif, sortie texte / JSON / HTML, mot de passe optionnel, profil optionnel, préréglage intégré, progression verbeuse et résumé agrégé.

Créer un tableau de bord statique

PreflightDashboard C:\Archive C:\Archive\preflight-dashboard

La démo dashboard écrit un index.html plus des rapports HTML par fichier. Aucun serveur web n’est requis, la sortie peut donc être publiée comme un artefact statique.

S’adapter aux consommateurs JSON de type veraPDF

Report := PDF.CreatePreflightReport('Input.pdf');
JSON := PDF.ConvertPreflightReportToVeraPDFStyle(Report);

L’adaptateur conserve la sémantique HotPDF tout en reformulant les échecs dans une structure de résultats de validation familière pour les outils qui consomment déjà un JSON façon veraPDF. Ses violations retiennent les mêmes valeurs stables de ruleId et de location structurée que le rapport JSON natif

Sujets connexes