Programmierung

Erstellen PDF/A-konformer Dokumente

Bei PDF/A handelt es sich um einen von der International Organization for Standardization (ISO) definierten Standard für die Langzeitarchivierung von PDF-Dokumenten. Ziel der Norm ist, dass ein PDF-Dokument auch Jahre nach der Erstellung noch lesbar ist. So darf ein PDF/A-konformes Dokument keine Referenzen zu externen Quellen, wie zum Beispiel Bildern, beinhalten und die verwendeten Fonts müssen in dem Dokument vollständig eingebettet sein.


Auf das Thema Verarbeiten von PDF-Dokumenten sind wir bereits in dem Artikel /Blog/2012/03/PDF-Verarbeitung-in-CONZEPT-16 eingegangen. Im heutigen Artikel möchten wir zeigen, wie mit CONZEPT 16 PDF-Dokumente für die Langzeitarchiverung erzeugt werden können.

Druckjob-Objekt

Soll ein Druckauftrag als PDF gespeichert werden, wird bei der Funktion PrtJobClose() die Konstante _PrtJobPdf angegeben. Pfad und Name der zu erzeugenden PDF-Datei wird über die Eigenschaft ppPdfFileName des Druckjob-Objekts vorgegeben. Um ein PDF/A-konformes Dokument zu erzeugen, muss zusätzlich die Eigenschaft ppPdfMode auf den Wert _PdfModePdfA gesetzt werden.

tJob # PrtJobOpen(mObject,'',_PrtJobOpenWrite |
                             _PrtJobOpenTemp,
                             _PrtTypePrintDocRecord);
if (tJob > 0)
{
   // Dateiname des PDF-Dokuments setzen
   tJob->ppPdfFileName    # _Sys->spPathMyDocuments
                            + '\MyDocument.pdf';

   // PDF/A-Dokument erzeugen
    tJob->ppPdfMode # _PdfModePdfA;

   // Druckjob schreiben
   tJob->PrtJobWrite(_PrtJobDoc);

   // Druckjob schließen
   tJob->PrtJobClose(_PrtJobPdf);
}
PDF-Objekt

Über das PDF-Objekt können neue Dokumente erstellt oder auch bestehende zur Verarbeitung geöffnet werden. Über Angabe der Option _PdfModePdfA beim Schließen des Objekts wird ein PDF/A- Dokument erstellt.

// Neues Dokument erstellen
tPdf # PdfNew();

// Seite öffnen
tPdf->PdfPageOpen(1);

// Font auswählen
tPdf->PdfTextFont('Arial',5.0);

// Text einfügen
tPdf->PdftextWrite(20.0,20.0,'PDF/A-konformes Dokument')

// Seite schließen
tPdf->PdfPageClose();

// PDF-Objekt schließen
tPdf->PdfClose(_Sys->spPathMyDocuments
               + '\MyDocument.pdf',_PdfModePdfA);
PDF-Drucker

Über den CONZEPT 16-PDF-Druckertreiber werden eingehende Druckaufträge an eine CONZEPT 16-Prozedur weitergeleitet und können dort mit Hilfe von Ghostscript in ein PDF-Dokument umgewandelt werden. Um ein PDF/A-Dokument erstellen zu können, müssen Ghostscript über die Eigenschaft ppGSOptions des Druckprozessor-Objekts
die notwendigen Optionen mitgeteilt werden.

// Optionen für Ghostscript
aPpcOpbject->ppGSOptions  # '-dPDFA;-dNOOUTERSAVE;-dUseCIEColor;' +
                            '-sProcessColorModel=DeviceCMYK';

//PDF-Dokument erstellen
aPpcOpbject->PpcMakePdf(_Sys->spPathMyDocuments +
                        '\MyDocument.pdf',_PpcPdfDefault);

Beim Erzeugen eines PDF/A-Dokuments findet grundsätzlich eine Validierung statt. Kann die Konformität nicht gewährleistet werden, da zum Beispiel die Lizenzierung einer verwendeten Schriftart das Einbetten nicht zulässt, geben die Funktionen PdfClose() und PrtJobClose() als Resultat _ErrPdfNotPdfA zurück.

2 Kommentare

2 Kommentare “Erstellen PDF/A-konformer Dokumente”

  1. @Th.Eichele
    Kann kein PDF/A-konformes Dokument erzeugt werden, wird auch keine PDF-Datei erstellt. Anders verhält sich das bei dem PDF-Drucker. Dieser erstellt in jedem Fall eine Datei.

    Jeder True-Type- und OpenType-Font verfügt über verschiedene Flags ( Embedding-Bits), welche bestimmen wie der Font eingebettet bzw. verwendet werden darf.

    Kann die PDF-Datei nicht erstellt werden, muss die Druck-Routine erneut durchgeführt werden.

  2. wird bei _ErrPdfNotPdfA trotzdem eine Pdf-Datei erstellt, oder muß man nochmals ohne OdfA drucken ?
    woran erkennt man solche Schriftarten ?
    Kann man dem Druckjob-Objekt bzw. Drucker z.B. sagen, das er in solchen Fällen alles als Bild speichern soll ?

Kommentar abgeben