VDP Dateien aus PDF Vorlagen erzeugen

pdfToolbox verfügt über ein "search and replace for VDP" Quick Fix, welches für bestimmte Arten des variablen Datendrucks verwendet werden kann. Das Quick Fix basiert auf einer PDF-Vorlage mit Platzhaltertext sowie einer JSON Konfigurationsdatei welche es ermöglicht, VDP-Daten mit individuellen Text- und Grafikinhalten (z. B. Barcodes) zu erzeugen.

TIPP: Wenn der Platzhaltertext nicht eindeutig ist und an anderer Stelle auf der Seite vorkommen könnte, sollte er durch ein oder mehrere Zeichen ergänzt werden. Z. B. könnte "Raum" an einer anderer Stelle im Text vorkommen (z.B. in dem Wort "Traum"). Daher wäre "$Raum" oder "%Raum%" eine bessere Wahl für den Platzhaltertext.

Ausführung des Quick Fixs – Zwei Möglichkeiten

Auf der Kommandozeile mit einer JSON Konfigurationsdatei

Geben sie  --quickfix  auf der Kommandozeile ein und fügen Sie anschließend Ihre JSON Konfigurationsdatei sowie die Eingabedatei hinzu.

In pdfToolbox Desktop mit dem Quick Fix "JavaScript basierten Konfiguration"

Das Quick Fix "JavaScript basierte Konfiguration" bietet einen Texteditor, in den der Inhalt der JSON Konfigurationsdatei eingefügt werden kann. Vorteil dieser Methode ist, dass Sie den Testmodus zur Fehlersuche verwenden können.

HINWEIS: Diese Quick Fix Konfiguration muss immer ein JavaScript Objekt zurückgeben, das die JSON Serialisierung enthält:

let cfg = {

	… Deine Quick Fix JSON Serialisierung 
};
cfg; //<- Rückgabe des JavaScript-Objekts

Erstellung einer JSON Konfigurationsdatei für VDP Daten

Im Folgenden wird anhand eines Beispiels gezeigt, wie VDP-Dateien mit benutzerdefinierten Texten und Strichcodes erstellt werden können. Die Ausgangsdatei enthält mehrere Platzhaltertexte, die mithilfe einer JSON Konfigurationsdatei ersetzt werden.

Um die einzelnen Parameter der JSON-Datei besser zu verstehen, werden sie im Folgenden erläutert:

Struktur der JSON Datei

{ 
 "quickfixes": [
 {            
   "quickfix": "search_and_replace_for_VDP",            
   "version": 1.0,
   "instructions": [
     {                    
      "page_selector": "all",                    
      "search_scope": "TrimBox",                    
      "left": 0,                    
      "bottom": 0,                    
      "right": 0,                    
      "top": 0,                    
      "unit": "pt",                    
      "replacements": [],
      "font_locations":  {}
     }            
   ]
  }    
 ]
}

//		"page_selector": "all|even|odd|<splitscheme_expression>"
//		"search_scope": "all|MediaBox|CropBox|BleedBox|TrimBox|ArtBox|absolute"
//		"unit": "pt|mm|inch"</splitscheme_expression>

Die Parameter "page_selector", "search_scope", "left", "bottom", "right", "top" und "unit" legen die Seiten sowie den Seitenbereich für die Textersetzung fest.

"replacements" Array

Im "replacements" Array werden die Parameter "search" und "replace" definiert. Mit dem Parameter "Operator" kann der zu suchende Text definiert werden. Sie können hier entweder den genauen Text eingeben (Operator: equal to) oder Sie verwenden einen RegEx-Ausdruck, der komplexere Suchmuster erlaubt (Operator: regex). Weitere Informationen zum Thema RegEx finden Sie hier.

Es können zwei Arten für die Textersetzung verwendet werden: Text und Strichcodes (z. B. QR-Codes, Matrixcodes). Das "records" Array enthält die Datensätze, welche für die Textersetzung verwendet werden sollen. In einem Array kann eine beliebige Anzahl von Datensätzen definiert werden. Auf Basis dieser Datensätze werden anschließend bei der Quick Fix Ausführung neue Seiten erstellt. Das heißt, für jeden "records" Eintrag wird eine neue Seite hinzugefügt. Da es mehrere "records" Arrays geben kann, bestimmt das größte Array die Anzahl der Duplizierungen. Ist eines der "records" nur ein String oder ein Array ist kürzer als das längste Array, wird der letzte Werte so oft wiederholt, wie notwendig.

Platzhaltertext durch Text ersetzen

Bei der Textersetzung übernimmt der ersetzte Text das Aussehen des Platzhaltertextes (Schriftart, Größe, Farbe usw.). Eine Textausrichtung kann ebenfalls festgelegt werden. Die Ausrichtung left/center/right ändert nicht die Laufweite des Textes. Ist die Textausrichtung "block_aligned" ausgewählt, wird der Text innerhalb der Grenzen gestaucht oder gestreckt.  

{
   "operator": "equal_to",
   "search_for": "$city",
   "records":  ["Madrid", "Amsterdam", "Berlin"],
   "alignments": "right_aligned"
},                       


//		"operator": "regex|equal_to"
//		"alignment": "right_aligned|left_aligned|center_aligned|block_aligned"

Platzhaltertext durch Strichcode ersetzen

Es ist ebenfalls möglich, den Platzhaltertext durch einen 1D- oder 2D-Code zu ersetzen. Der Code wird an der Grundlinie des Platzhaltertextes ausgerichtet. Die Ausrichtung links/mittig/rechts verhält sich genauso wie bei der Textersetzung.

{
   "operator": "equal_to",
   "search_for": "$qr",
   "records": ["8676780-h5s-dh5-7dh-jd7-xpK", "8676792-zxb-vb8-kb4-q78-aLf", "8676812-84H-1v2-ddG-ivh-uiV"], 
   "barcode":
   { 
     "type": "QR-Code",
     "width": "20mm",
     "height": "20mm",
     "modulewidth": "0.33mm",
     "textplacement": "below",
     "barwidthreduction": "0%",
     "quietzoneleft": "0",
     "quietzoneright": "0",
     "quietzoneunit": "pt"
   },                            
   "alignments": "right_aligned"                        
}


//		"operator": "regex|equal_to"
//		"textplacement": "above|below|none"
//		"quietzoneunit": "pt|mm|in|X|cm|m|ft|pc"
//		"alignment": "right_aligned|left_aligned|center_aligned"
//		"type": see link below (Supported Barcode symbologies)

Eine Liste der unterstützten Barcode-Typen finden Sie hier: List of supported barcodes and matrix codes.

Eine Beschreibung der jeweiligen Barcode-Parameter (wie modulewidth, barwidthreduction oder quietzoneleft) finden Sie in diesem Artikel: Extended list of parameters for the barcode object.

Beispiel für EAN 13 Code ("records" muss dreizehnstellige Zahl enthalten)
<p>{
  "operator": "equal_to",
  "search_for": "$EAN",
  "records": ["1234567890128", "1234567890128", "1234567890128"],
  "barcode": 
  {
    "type": "EAN 13",
    "width": "50mm",
    "height": "15mm",
    "modulewidth": "0.33mm",
    "textplacement": "none",
    "barwidthreduction": "0%",
    "quietzoneleft": "0",
    "quietzoneright": "0",
    "quietzoneunit": "pt"
  },
  "alignments": "right_aligned"
}</p>
Ergebnis:

Der "font_locations" Parameter

Unter "font_locations" sind mehrere Parameter angeben. Hier kann festgelegt werden, wo sich die benötigten Schriftarten befinden. Sind in der  PDF-Datei bereits alle erforderlichen Schriftarten vollständig eingebettet, werden bei der Textersetzung keine Probleme aufgrund von fehlenden Zeichen auftreten. Sind nicht alle Schriftarten eingebettet, muss der Ort/Ordner angegeben werden, welcher vor der Textersetzung durchsucht werden soll. Alternativ können auch die erforderlichen Schriftarten separat über einen Pfad angegeben werden.

{
   "in_fonts_folder_next_to_input_file": false,
   "in_any_folder_next_to_input_file": false, 
   "next_to_input_file": false,
   "in_user_fonts_folder": false,
   "in_system_fonts_folder": false, 
   "use_paths": false,
   "paths": [ 
      "../some_folder"
   ]                        
}

Ergebnis

Da in der JSON Konfigurationsdatei für jeden Platzhalter jeweils drei "records" Einträge definiert wurden, enthält die Ausgabedatei drei Seiten mit individuellem Text: