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 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 des parties du document : GTS_PDFVTVersion XMP sous forme de texte d’élément ou d’attribut RDF, correspondance de la date de modification, marqueur de base PDF/X, intent de sortie, DPartRoot, DPartRootNode, NodeNameList et couverture DPart au niveau de la 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 du profil 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’intégration textuelle ajoute un bloc de commentaires lisible après le dernier marqueur EOF. Le chemin XMP ajoute une charge utile de forme RDF pour les flux d’archivage qui analysent des 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 préflight fraîche sur les octets source. L’aide de diff est orientée ligne et adaptée aux rapports de préflight 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;

L’aide de réparation reste volontairement étroite. Elle traite les octets résiduels après le dernier marqueur EOF et les marqueurs EOF manquants, mais ne reconstruit pas les tables de références croisées et ne réécrit pas 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

Le CLI reflète le flux de travail de la bibliothèque : une entrée de fichier unique ou de répertoire récursif, une sortie texte / JSON / HTML, un mot de passe facultatif, un profil facultatif, un préréglage intégré, une progression détaillée et un 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, donc la sortie peut être publiée comme 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 transformant les échecs en une structure de résultat de validation familière pour les outils qui consomment déjà un JSON de type veraPDF

Sujets connexes