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/joinBeispiel 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(); }