Preflight-Kochbuch

Dieses Cookbook gruppiert die Preflight-APIs und -Demos in aufgabenorientierte Rezepte; verwenden Sie die API-Referenz, wenn Sie genaue Signaturen benötigen; verwenden Sie diese Seite, wenn Sie einen funktionierenden Pfad für eine Anwendung, ein Build-Skript oder einen CI-Job benötigen

Wählen Sie ein Ausgabeformat

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;

Die Textausgabe ist byte-stabil und diff-freundlich; JSON eignet sich für die Pipeline-Aufnahme; HTML is in sich geschlossen und kann direkt geöffnet oder als CI-Artefakt gespeichert werden; CSV verwendet stabile Spalten für Tabellenkalkulationen und Batch-Berichts-Workflows

PDF/VT-Dokumente validieren

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;

Der PDF/VT-Bericht konzentriert sich auf die ISO 16612-2-Identifikation und die Struktur der Dokumentteile: XMP-Eintrag GTS_PDFVTVersion als Elementtext oder in Form eines RDF-Attributs, Abgleich des Änderungsdatums, PDF/X-Basismarkierung, OutputIntent, DPartRoot, DPartRootNode, NodeNameList und seitenbezogene DPart-Abdeckung

Ein Profil anwenden

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;

Profile unterdrücken benannte Prüfungen, Warnungen oder alle Hinweise; verwenden Sie ValidatePreflightProfile vor dem Anwenden eines vom Benutzer verfassten Profils, wenn ein sicheres Fehlschlagen (failing closed) wichtiger ist als das stille Ignorieren eines veralteten Namens

Erstellen Sie ein wiederverwendbares Profil aus einer Voreinstellung

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;

Verwenden Sie MergePreflightProfiles, um eine Voreinstellung mit projektspezifischen Namen zu kombinieren; verwenden Sie DiffPreflightProfiles, um die Profilabweichung vor dem Aktualisieren einer gemeinsam genutzten Konfigurationsdatei zu überprüfen

Archivieren Sie den Bericht zusammen mit der PDF

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

Der Text-Einbettungspfad hängt einen lesbaren Kommentarblock nach der endgültigen EOF-Markierung an; der XMP-Pfad hängt eine RDF-förmige Nutzlast für Archivierungs-Workflows an, die Metadatenpakete scannen

Einen eingebetteten Bericht validieren

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

Der Validierungspfad vergleicht den eingebetteten Fingerabdruck mit einem neuen Preflight-Durchlauf über die Quellbytes; das Diff-Hilfsmittel ist zeilenorientiert und auf HotPDF-Preflight-Berichte abgestimmt

Einen konservativen Reparaturlauf ausführen

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

Das Reparatur-Hilfsmittel bleibt bewusst schmal gehalten; es behandelt nachfolgende Bytes nach der endgültigen EOF-Markierung und fehlende EOF-Markierungen, baut jedoch keine Kreuzverweistabellen neu auf und schreibt keine Streams neu

Viele Berichte aggregieren

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

Die aggregierte Ausgabe listet eine Statuszeile pro PDF sowie Summen für verarbeitete Berichte, Fehler und Warnungen auf; dies ist nützlich, wenn eine Pipeline eine Zusammenfassung benötigt, obwohl detaillierte Berichte pro Eingabedatei aufbewahrt werden

Verwenden Sie das Befehlszeilen-Tool

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

Die CLI spiegelt den Bibliotheks-Workflow wider: Eingabe einer Datei oder eines rekursiven Verzeichnisses, Text- / JSON- / HTML-Ausgabe, optionales Passwort, optionales Profil, integrierte Voreinstellung, ausführlicher Fortschritt und aggregierte Zusammenfassung

Ein statisches Dashboard erstellen

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

Die Dashboard-Demo schreibt eine index.html sowie HTML-Berichte pro Datei; es ist kein Webserver erforderlich, sodass die Ausgabe als statisches Artefakt veröffentlicht werden kann

An veraPDF-style JSON-Konsumenten anpassen

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

Der Adapter behält die HotPDF-Semantik bei, während er Fehler in eine vertraute Validierungsergebnis-Struktur für Tools umformt, die bereits veraPDF-ähnliches JSON konsumieren

Verwandte Themen