CIB pdf toolbox technischer Leitfaden (DE)

18. Schneller Einstieg

18.3. Einbindung der CIB pdf toolbox - Java Codebeispiele

Nachfolgende Beispiele demonstrieren die Ansteuerung der CIB pdf toolbox unter JAVA.

Beispiel für PDF Integration aus RTF über CIB pdf/join
Beispiel mit CIB pdf/merge und CIB pdf/join
JAVA-Beispiel: Direkter Druck eines PDF-Dokuments über die CIB runshell und CIB pdf toolbox
Beispiel CIB pdf toolbox direkter Druck eines PDF-Dokuments über den Java Wrapper (JCoMod)

Beispiel für PDF Integration aus RTF über CIB pdf/join

Wenn Sie ein dynamisches RTF-Dokumentprojekt im Einsatz haben, daß auch PDF Dateien in das Zieldokument mit integriert, dann ist dafür in der Regel folgender Ablauf vorgesehen:

  • Über CIB merge wird zunächst das dynamische Dokumentprojekt unter Beteiligung von CSV und/oder XML Datenversorgung zu einer RTF Ergebnisdatei aufbereitet.
  • Über die CIB format/pdf Komponente entsteht aus der RTF Ergebnisdatei eine PDF Zwischenergebnisdatei. Dort sind nun XMP Metadaten enthalten, die weitere Anweisungen für den Verarbeitungsschritt mit der CIB pdf toolbox enthalten.
  • Über die CIB pdf toolbox wird nun aus der PDF Zwischenergebnisdatei eine PDF Ergebnisdatei erzeugt.

Das nachfolgende JAVA Beispiel beschreibt nur diesen letzten Schritt.

package com.cib.comod.test;
import com.cib.comod.jobs.ICibPdfJoinJob;
 
/**
• Beispielimplementation für eine Benutzung des JCoMod Wrappers mit
   CIB pdf toolbox
•  Beispiel:
•  1) Nimmt eine PDF Zwischenergebnisdatei und gibt sie als PDF Ergebnisdatei aus.
•  2) Intern im PDF enthaltene XMP Metadaten werden dabei verarbeitet
 *
 */
public boolean doPdfJoinJob(String a_Input, String a_Output, String a_Workspace)
{
    JCibPdfJoinJob t_PdfJob = new JCibPdfJoinJob();
    t_PdfJob.initialize();
    if (!t_PdfJob.isInitialized())
    {
       System.out.println(„Fehler beim Initialisieren des JCibPdfJoinJob“);
       t_PdfJob.dispose(); // Resourcen d. Jobs freigeben
       return false;
    }
 
    //t_PdfJob.setProperty(ICibPdfJoinJob.PROPERTY_LICENSEKEY, “...”);
//t_PdfJob.setProperty(ICibPdfJoinJob.PROPERTY_LICENSECOMPANY, “...”);
 
//PDF Zwischenergebnis aus CIB format/pdf Konvertierung
//muss die anzuhängende PDF Datei als XMP Metainfo enthalten
t_PdfJob.setProperty(ICibPdfJoinJob.PROPERTY_INPUTFILE, „input.pdf“);
 
//zu erzeugendes PDF Ergebnisdokument
t_PdfJob.setProperty(ICibPdfJoinJob.PROPERTY_OUTPUTFILE, „output.pdf“);
//Job ausführen    t_PdfJob.execute();
 
//Fehlerbehandlung
int t_Error =
        ((Integer)t_PdfJob.getProperty(ICibPdfJoinJob.PROPERTY_ERROR)).intValue();
    if (t_Error != 0)
    {
        // Fehler beim Ausführen des Jobs
        String t_Errortext = (String)
t_PdfJob.getProperty(ICibPdfJoinJob.PROPERTY_ERRORTEXT);
System.out.println(„Fehler beim Ausführen: „+t_Error+“ „+t_Errortext);
t_PdfJob.dispose(); // Resourcen d. Jobs freigeben
return false;
    }
t_PdfJob.dispose(); // Resourcen d. Jobs freigeben
return true;
}

Beispiel mit CIB pdf/merge und CIB pdf/join

Der nachfolgende Java Code muss in eine Java-Klasse „PdfToolboxSample“ eingefügt werden. Zusätzlich ist der Java JCoMod Wrapper (mindestens Version 2.0.20) erforderlich, der die CIB pdf toolbox native Library für Java über JNI kapselt und so eine einfache Steuerung aus Java möglich macht.

Der Wrapper besteht aus diesen Dateien:

  • CoModJobs.jar
  • JCoMod.dll

Damit das Beispiel kompiliert, muss die CoModJobs.jar im Classpath angegeben werden. Zum Zeitpunkt der Entwicklung war ein JDK 1.4.1 installiert.

Die im Codebeispiel verwendeten Dateien sind auf die im Lieferumfang enthaltenen Samples abgestimmt, damit ist eine sofortige Funktionalität zu Testzwecken gewährleistet.

import java.awt.Color;
import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTextField;

import com.cib.comod.jobs.ICibPdfJoinJob;
import com.cib.comod.jobs.ICibPdfMergeJob;
import com.cib.comod.jobs.IComodJob;
import com.cib.comod.jobs.JCibPdfJoinJob;
import com.cib.comod.jobs.JCibPdfMergeJob;

public class PdfToolboxSample extends JFrame {
JTextField TextPdf1;
JTextField TextPdf2;
JTextField TextOut;
JTextField TextData;
JList FieldList;
JRadioButton RadioJoin;
JRadioButton RadioMerge;
	
public PdfToolboxSample()
	{
makeFrame();
	}
	
public void makeFrame()
	{
//Fenster erstellen
setTitle(“PdfToolboxSample”);
setSize(400,400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
//Controls erstellen
RadioMerge = new JRadioButton(new RadioMergeAction());
RadioJoin = new JRadioButton(new RadioJoinAction());
TextPdf1 = new JTextField(“..\\merge xml\\test.pdf”);
TextPdf2 = new JTextField(“..\\join\\test1.pdf;..\\join\\funktionstest1.pdf;..\\join\\funktionstest2.pdf”);
TextData = new JTextField(“XML:..\\merge xml\\data.xml;//Testdaten//Person”);
TextOut = new JTextField(“..\\tempoutput\\Output.pdf”);
//Labels erstellen
JLabel LabelPdf1=new JLabel(„Pdf file 1:“);
JLabel LabelPdf2=new JLabel(“Pdf file 2:”);
JLabel LabelData=new JLabel(“Data file:”);
JLabel LabelOut=new JLabel(“Output file:”);
JLabel LabelFields=new JLabel(“Pdf Fields:”);
             
//die richtigen Größen setzen 
RadioJoin.setSize(70,25);
RadioMerge.setSize(70,25);
LabelPdf1.setSize(70,25);
TextPdf1.setSize(280,25);
LabelPdf2.setSize(70,25);
TextPdf2.setSize(280,25);
LabelData.setSize(50,25);
TextData.setSize(280,25);
LabelOut.setSize(70,25);
TextOut.setSize(280,25);
LabelFields.setSize(70,25);
        
//die richtigen Positionen setzen
RadioJoin.setLocation(100,30);
RadioMerge.setLocation(180,30);
LabelPdf1.setLocation(20,60);
TextPdf1.setLocation(100,60);
LabelPdf2.setLocation(20,90);
TextPdf2.setLocation(100,90);
LabelData.setLocation(20,120);
TextData.setLocation(100,120);
LabelOut.setLocation(20,150);
TextOut.setLocation(100,150);
LabelFields.setLocation(20,180);
        
FieldList = new JList();
JScrollPane FieldsPane = new JScrollPane(FieldList);
FieldsPane.setVerticalScrollBarPolicy (JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
FieldsPane.setSize(280,100);
FieldsPane.setLocation(100,180);
        
//einen Button zum Ausführen von Join und Merge erstellen
JButton ButtonExecute = new JButton(new ExecuteAction());
ButtonExecute.setSize(100,25);
ButtonExecute.setLocation(100,320);
        
//alles aufs Fenster setzen
getContentPane().setLayout(null);
getContentPane().add(RadioMerge);
getContentPane().add(RadioJoin);
getContentPane().add(ButtonExecute);
getContentPane().add(LabelPdf1);
getContentPane().add(TextPdf1);
getContentPane().add(LabelPdf2);
getContentPane().add(TextPdf2);
getContentPane().add(LabelData);
getContentPane().add(TextData);
getContentPane().add(LabelOut);
getContentPane().add(TextOut);
getContentPane().add(LabelFields);
getContentPane().add(FieldsPane);
        				
//Voreinstellung und anzeigen
RadioJoin.setSelected(true);
enableFields();
setVisible(true);
	}
	
public static void main(String[] args)
	{
JFrame.setDefaultLookAndFeelDecorated(true);
new PdfToolboxSample();		
	}
	
class ExecuteAction extends AbstractAction {
public ExecuteAction() {
putValue(Action.NAME, “Execute”);}
public void actionPerformed(ActionEvent e) {	
execute();}
	}
	
class RadioJoinAction extends AbstractAction {
public RadioJoinAction() {
putValue(Action.NAME, “Join”);}
public void actionPerformed(ActionEvent e) {
RadioMerge.setSelected(false);
enableFields();}
	}
	
class RadioMergeAction extends AbstractAction {
public RadioMergeAction() {
putValue(Action.NAME, “Merge”);}
public void actionPerformed(ActionEvent e) {
RadioJoin.setSelected(false);
enableFields();}
	}
	
//Plausibilisierung der GUI
public void enableFields()
	{
if(RadioJoin == null)
return;
if(RadioJoin.isSelected())
		{
TextPdf2.setEnabled(true);
TextPdf2.setBackground(Color.white);
TextData.setEnabled(false);
TextData.setBackground(PdfToolboxSample.this.getBackground());
		}
else
		{
TextPdf2.setEnabled(false);
TextPdf2.setBackground(PdfToolboxSample.this.getBackground());
TextData.setEnabled(true);
TextData.setBackground(Color.white);
		}
	}
	
//Job ausführen
public void execute()
	{
//sich für einen Job entscheiden
if(RadioJoin.isEnabled())
doJoin();
if(RadioMerge.isEnabled())
doMerge();
	}
	
public void doMerge()
	{
//erzeuge einen JCibPdfMerge-Job
JCibPdfMergeJob t_Job = new JCibPdfMergeJob();

// Der Job muss initialisiert werden, sonst läuft gar nichts
if (!t_Job.initialize())
		{
System.out.println(„Fehler beim Initialisieren des Jobs“);
return;
		}

// setze die Properties
t_Job.setProperty(ICibPdfMergeJob.PROPERTY_INPUTFILE, TextPdf1.getText());
t_Job.setProperty(“Data”, TextData.getText());
t_Job.setProperty(ICibPdfMergeJob.PROPERTY_OUTPUTFILE, TextOut.getText());
t_Job.setProperty(“GetFieldInfo”, “1”);
// Merge Job ausführen
t_Job.execute();
		
//FieldInfos auswerten
String t_FieldNames = (String) t_Job.getProperty(“FieldNames”);
//FieldNames sind ;-separiert
if (t_FieldNames != null)
		{
String t_FieldNamesArray[] = t_FieldNames.split(“;”);
FieldList.setListData(t_FieldNamesArray);
		}

//Fehlerbehandlung
System.out.println(“execute() beendet: “);
		
if (((Integer)t_Job.getProperty(IComodJob.PROPERTY_ERROR)).intValue()>0)
System.out.println(“Fehler beim Ausführen: “+t_Job.getProperty(IComodJob.PROPERTY_ERROR)+” “+t_Job.getProperty(IComodJob.PROPERTY_ERRORTEXT));
else
System.out.println(„Erfolg\n“);
System.out.println(„Merge Job geschlossen\n“);
	}
	
public void doJoin()
	{
//erzeuge einen JCibPdfJoin-Job
JCibPdfJoinJob t_Job = new JCibPdfJoinJob();

// Der Job muss initialisiert werden, sonst läuft gar nichts
if (!t_Job.initialize())
		{
System.out.println(„Fehler beim Initialisieren des Jobs“);
return;
		}

// die zu joinenden PDFs als ;-separierte Liste zusammenbauen
String t_String = TextPdf1.getText();
if (TextPdf2.getText().toString().length()>0)
t_String += „;“;
t_String += TextPdf2.getText();
// setze die Properties
t_Job.setProperty(ICibPdfJoinJob.PROPERTY_INPUTFILE, t_String);
t_Job.setProperty(ICibPdfJoinJob.PROPERTY_OUTPUTFILE, TextOut.getText());
t_Job.setProperty(“GetFieldInfo”, “1”);
// Join Job ausführen
t_Job.execute();
		
//FieldInfos auswerten
String t_FieldNames = (String) t_Job.getProperty(“FieldNames”);
//FieldNames sind ;-separiert
if (t_FieldNames != null)
		{
String t_FieldNamesArray[] = t_FieldNames.split(“;”);
FieldList.setListData(t_FieldNamesArray);
		}

//Fehlerbehandlung
System.out.println(“execute() beendet: “);
		
if (((Integer)t_Job.getProperty(IComodJob.PROPERTY_ERROR)).intValue()>0)
System.out.println(“Fehler beim Ausführen: “+t_Job.getProperty(IComodJob.PROPERTY_ERROR)+” “+t_Job.getProperty(IComodJob.PROPERTY_ERRORTEXT));
else
System.out.println(„Erfolg\n“);
System.out.println(„Join Job geschlossen\n“);
	}
	
}

JAVA-Beispiel: Direkter Druck eines PDF-Dokuments über die CIB runshell und CIB pdf toolbox

Um diese Beispiel auszuführen werden zwei weitere Klassen benötigt: RunshellProcess.java und Process.java .Diese erhalten Sie gerne beim CIB Support.

import java.io.*;
import de.cib.comod.RunshellProcess;

public class DirectPrintPdf {
public static void main(String[] args) {
//PDF-Datei festlegen z.B. ein Test.pdf
String inputFileName = new String(“..\\Test.pdf”);
// neuen Runshell-Prozess starten
RunshellProcess cibRunShell = new RunshellProcess(“cibrsh.exe”);
//Druckernamen festlegen z.B. HP LaserJet 4100 Series PS
cibRunShell.addArgument(„PrinterName = \\\““ + „HP LaserJet 4100 Series PS“ + „\\\““);
//Ausgabeformat festlegen
cibRunShell.addProperty(„OutputFormat“, „FormatPrinter“);
//Eingabedatei festlegen
cibRunShell.addCommand(RunshellProcess.COMMAND_PDFJOIN, inputFileName);
try {
//Pfad zu den Libraries angeben und Prozess starten
runshell.executeAndWait(new File(“.”));
		}
catch(IOException io) {
io.printStackTrace();
		}
catch(InterruptedException inter) {
inter.printStackTrace();
		}
}


Beispiel CIB pdf toolbox direkter Druck eines PDF-Dokuments über den Java Wrapper (JCoMod)
import java.io.*;
import com.cib.comod.jobs.*;

public class DirectPrintPdf {
public static void main(String[] args) {
JCibPdfJoinJob t_PDFJob = new JCibPdfJoinJob();
t_PDFJob.initialize();
if (!t_PDFJob.isInitialized())
		{
System.out.println(„Fehler beim Initialisieren der Dll“);
return;
		}
//PDF-Datei festlegen z.B. ein Test.pdf
t_PDFJob.setProperty(ICibPdfJoinJob.PROPERTY_INPUTFILE, “Test.pdf”);
//Druckernamen festlegen z.B. HP LaserJet 4100 Series PS
t_PDFJob.setProperty(„PrinterName“, „HP LaserJet 4100 Series PS“ );
//Ausgabeformat festlegen
t_PDFJob.setProperty(ICibPdfJoinJob.PROPERTY_OUTPUTFORMAT, “FormatPrinter”);
//Prozess starten
t_PDFJob.execute();
int t_ReturnValue =(Integer)t_PDFJob.getProperty(ICibPdfJoinJob.PROPERTY_ERROR)).intValue();
if (t_ReturnValue != 0) 
		{
System.out.println(“Fehler! CIB pdf toolbox returns “ + t_ReturnValue);
		}
t_PDFJob.dispose();
}