CIB jView form technischer Leitfaden

Site: CIB eLearning
Course: CIB jView form
Book: CIB jView form technischer Leitfaden
Printed by: Guest user
Date: Tuesday, 7 May 2024, 3:01 AM

1. Lieferumfang

Komponente

Softwareumfang

CIB jView&form

Form ist in CIB jView integriert (als Package) und kann nicht als Standalone Applikation gestartet werden.


CIB jView&form für Windows

Zusätzlich zu den im Technischen Leitfaden für CIB jView beschriebenen Komponenten enthält jView&form für Windows keine weiteren Komponenten.


CIB jView&form für Linux

Zusätzlich zu den im Technischen Leitfaden für CIB jView beschriebenen Komponenten enthält jView&form für Linux keine weiteren Komponenten.


2. Einführung

Die vorliegende technische Dokumentation gibt einen Überblick über die Konfigurations- und Einsatzmöglichkeiten nebst Codebeispielen für einen "schnellen Einstieg" in die Thematik. Dieses Kapitel beschäftigt sich dabei mit einem Überblick über die Funktionalitäten und Benutzeroberfläche des Programms.

Elektronische Formulare sind eine unverzichtbare Grundlage für effiziente Verwaltungsabläufe.
Ein optimaler Ablauf erfordert aber nicht nur, diese hausintern im Rahmen von Unternehmens spezifischen Applikationen bearbeiten zu können, sondern auch die Einbindung der Kunden ohne Medienbruch.

Viele Kunden lernen den Komfort der Nutzung elektronischer Formulare in Ihrer heimischen Umgebung als zusätzlichen Service schätzen.

Mit CIB jView&form können Sie neben Ihren hausinternen Abläufen auch den Arbeitsplatz Ihrer Kunden voll in Ihre Geschäftsprozesse einbinden.


Cib jView&form - Allgemein

CIB jView&form ist eine Erweiterung des von der CIB software GmbH entwickelten Dokument-Viewers „CIB jView“. Diese Erweiterung schafft die Möglichkeit, Formularfelder in PDF- und RTF-Dokumenten zu bearbeiten und die geänderten Formulare auszudrucken oder zu speichern.

Das bisherige Seitenvorschaumodul CIB jView wird um diese Funktionalität ergänzt:

  • Anzeige und Hervorhebung der Formularfelder
  • Vorbelegung von Formularfeldern
  • Interaktives Ausfüllen und Ändern der Formularfelder
  • Drucken des Formulardokuments einschließlich der Änderungen
  • Speichern des bearbeiteten Formulardokuments

Für Entwickler stehen Schnittstellen zur optimalen Einbindung in Ihre Anwendungen und Geschäftsprozesse und zur Vor- und Nachbearbeitung der (Daten-)Ergebnisse zur Verfügung.

CIB unterstützt mit CIB jView&form die spezifizierten*) Formularfelder der Dokumentformate:

  • PDF-Formulare (Adobe Acrobat )

    RTF-Formulare (Microsoft Office)

*) Folgende Formularfeldtypen werden derzeit noch nicht unterstützt:

  • List, PushButton


3. Ergonomische Anforderungen an CIB jView&form

Für die interaktive Nutzung von Formularen im PDF- oder RTF-Format bietet CIB jView&form folgendes Benutzerverhalten:

  • Dynamisches Erkennen von Formularfeldern in PDF und RTF Dokumenten
  • Sichtbares Hervorheben der Formularfelder. Dazu stehen dem Anwender spezielle Eigenschaf­ten (=Properties) für die Farbgebung der aktiven und inaktiven Formularfelder zur Verfügung.
  • Optionales Umschalten in den Formulareditiermodus per Mausdoppelklick auf den Formularfeldern und per Toolbarbutton bzw. Menüfunktion.
  • Navigation durch das Formular mit der Tabulatortaste und Mausbedienung
  • (Zwischen-)Speichern von (teil-)ausgefüllten Formularen in die konfigurierten Zielformate
  • Ausdrucken von ausgefüllten Formularen (auch auf Vordrucke)
  • Nacherfassung von Formulardaten ermöglichen
  • Unterstützung von Feldplausibilitäten (Ausbaustufe 1.1)
  • Unterstützung von feldübergreifenden Formular-Events (Ausbaustufe)


4. Unterstützte Formularfeldtypen

Formularfelder sind elementarer Bestandteil eines elektronischen Formulars. Sie steuern die Interaktion mit dem Nutzer. CIB jView&form unterstützt die nachfolgend aufgelisteten Formularfeldtypen, die je nach Art der erforderlichen Daten zweckmäßig zum Einsatz kommen können. Bitte beachten Sie, dass nicht jedes unterstützte Dateiformat alle Formularfeldtypen anbietet.

Bildschirmelement

Feldtyp

Wertebereich

Format

 

CheckBox
Kontrollkästchen

Es können zwei Zustände dargestellt werden: aktiviert und deaktiviert

Der aktivierte Zustand kann über Häkchen, Kreuz, Karo, Kreis, Stern und Quadrat sichtbar gemacht werden.

PDF/RTF


RadioButton / Optionsfeld

Mit Optionsfeldern können zwei Zustände abgebildet werden: aktiviert und deaktiviert.

Man kann Optionsfelder zu Gruppen zusammenfassen, in der dann nur ein Feld den Zustand aktiv haben kann.

Es ist im Gegensatz zu Kontrollkästchen immer genau ein Feld in der Gruppe aktiv. Die optische Erscheinung kann sehr variabel sein, es sind z.B. auch Kästchenformen möglich.

 

 

Textfeld einzeilig / mehrzeilig

Dient zur Eingabe von freiem Inhalt. Die Eingabelänge kann i.d.R. begrenzt werden.

 

 

Unterschriftenfeld / Signaturfeld

Dient zur Eingabe einer elektronischen Unterschrift über eine entsprechende Hardware (Pad, Tablet PC).

Siehe gesonderte Dokumentation zu "CIB jView&sign"

 


Bildschirmelement

Feldtyp

Wertebereich

Format

 

ComboBoxen
Kombinationsfeld

Ermöglicht dem Benutzer eine Auswahl aus vorgegebenen Werten in einem Feld.

PDF/RTF

 

ComboBox / Kombinationsfeld mit eigener Eingabe

In Entwicklung:

Ermöglicht dem Benutzer eine Auswahl aus vorgegebenen Werten in einem Feld. Gleichzeitig ist auch die Eingabe eines anderen Eintrages möglich.

 

 

Listboxen / Listenfeld mit einfacher Auswahl

Hat eine ähnliche Funktion wie das Kombinationsfeld. Es kann jedoch kein eigener Eintrag gesetzt werden, sondern nur ein Eintrag aus der angebotenen Menge ausgewählt werden.

 

 

Listboxen / Listenfeld mit mehrfacher Auswahl

Es können mehrere der angebotenen Listeneinträge ausgewählt werden und erscheinen später im Formular.

 


5. Dokument mit Formularfeldern vorbereiten

Für die Erstellung der PDF- und RTF-Formulare, die von CIB jView&form unterstützt werden, gibt es verschiedene Werkzeuge von unterschiedlichen Anbietern. Es werden an dieser Stelle gängige Werkzeuge für das jeweilige Dateiformat (RTF und PDF) und die CIB eigenen Produkte CIB pdf brewer und die CIB format/pdf beispielhaft genannt:

  • Das Produkt Adobe Acrobat von Adobe
  • Das Produkt Microsoft Word aus der Microsoft Office Palette
  • Der CIB pdf brewer, über den man aus Microsoft Word direkt ein PDF-Formular generieren kann
  • CIB format/pdf als Komponente zum direkten Umwandeln von RTF nach PDF Dokumenten (inkl. Formularfeldern)


5.1. PDF-Formular

Allgemein
Feldanweisungen aus MS-Office in PDF Formularfelder umwandeln
PDF-Formular aus MS-Office über den CIB pdf brewer
PDF-Formular aus RTF Dateien über das CIB format/pdf Modul

Allgemein

Das PDF ist seit seiner Einführung in den 90er Jahren aufgrund seiner plattformübergreifenden, universellen Einsatzmöglichkeiten ein inzwischen weit verbreitetes Dateiformat, das in viele Bereiche vorgedrungen ist. Formulare, die online zur Verfügung gestellt werden oder für interne Zwecke verwendet werden, liegen sehr häufig als PDF vor.

Ein nicht unerheblicher Vorteil z. B. in Bezug auf die Archivierung bildet dabei auch die kleine Dateigröße, die das PDF gegenüber vielen anderen Office-Formaten hat.

Ein Nachteil - aus Sicht der dynamischen Dokumentaufbereitung - ist die geringe Dynamik, die das PDF-Dateiformat in Bezug auf variabel lange Textpassagen bilden kann. Das ist mit ein Grund, warum CIB jView&form neben der direkten PDF-Unterstützung auch den Weg über RTF-Formulare und z. B. eine anschließende Konvertierung nach PDF ermöglicht. Hierzu ist die Property „form.Enabled“ zu aktivieren.

PDF-Formular mit Acrobat erzeugen

Bitte nutzen Sie dazu die von Adobe bereitgestellte Benutzerdokumentation für den Adobe Acrobat für das direkte Erstellen eines PDF-Formulars.

PDF-Formular aus MS-Office Dokumenten erzeugen

Man kann auch das MS-Office Textsystem nutzen und aus den dort verfügbaren Feldanweisungen ein Formular designen und unter Nutzung verschiedener Alternativen der CIB Module daraus ein PDF Formular erzeugen.


Feldanweisungen aus MS-Office in PDF Formularfelder umwandeln

Die nachfolgende Aufstellung gibt einen Überblick, welche MS-Office Feldanweisungen für die Gestaltung eines PDF-Formulars genutzt werden können.

–        Dies sind zum einen alle unter MS-Office verfügbaren Formularfelder.

–        Zusätzlich gibt es noch die Möglichkeit, die Variablenplatzhalter von Word (REF, MERGEFIELD/SERIENDRUCK) in Formularfelder konvertieren zu lassen. Dafür sind zusätzliche Schalterkommandos eingeführt worden, die eine spezielle Umsetzung gezielter steuern lassen.

–        Die CIB workbench (=MS-Office AddIn) ist ein ideales Hilfsmittel zur interaktiven Erfassung dieser Feldattribute (siehe CIB workbench Anwenderhandbuch).


REF / MERGEFIELD Feldanweisung mit

Es gibt nun einen neuen Feldschalter, der XML/XHTML und CSS konform genutzt werden soll. Er ermöglicht eine variablere Spezifikation der Feldeigenschaften eines gewünschten Formularfeldes im Zielformat.

Der Schalter sieht wie folgt aus:

\* <cib-formfield type="" value="" style="" ... />

 

Details zu den Attributen und Werten des <cib-formfield>-Schalters entnehmen Sie bitte den Schulungsunterlagen „Dynamische Dokumente - Band 1 – Grundlagen“


MS-Office Formularfeldanweisungen

MS-Office Feldanweisung

Bemerkung

{ FORMTEXT }

Wird in Texteingabefeld umgewandelt. Es kann von CIB merge keine Vorbelegung eingemischt werden.

{ FORMCHECKBOX }

Wird in eine Checkbox(Ankreuzfeld) umgewandelt

{ FORMDROPDOWN }

Wird in ein Dropdownmenü umgewandelt


Mehrzeilige Formularfelder

Eine gesonderte Ausnahme innerhalb der Formularfelder bilden mehrzeilige Textfelder:

{ FORMTEXT \* CIB_RECBEGIN } <Text und/oder Zeilenschaltungen> { FORMTEXT \* CIB_RECEND }

 

Details zu diesen mehrzeiligen Textfeldern entnehmen Sie bitte den Schulungsunterlagen „Dynamische Dokumente - Band 1 – Grundlagen“


DF-Formular aus MS-Office über den CIB pdf brewer

Der CIB pdf brewer ist ein für alle Windows Anwendungen tauglicher PDF Drucker. Er verfügt in einer MS-Office Umgebung über ein zusätzliches AddIn, mit dem Sie bequem aus MS-Office heraus PDF-Formulare erstellen können. Mit der Installation des CIB pdf brewer erhalten Sie im MS-Office eine zusätzliche Symbolleiste.



PDF-Formular aus RTF Dateien über das CIB format/pdf Modul

Die CIB format/pdf Komponente, ist ein Modul mit dem direkt RTF Dateien in PDF Dateien konvertieren kann. Über die Property „ShowFormfields“ kann man das Konvertieren von Formularfeldern aktivieren. Alle Details zu dieser Konvertierungsmöglichkeit entnehmen Sie bitte dem gesonderten Technischen Leitfaden zu CIB format/output.


5.2. RTF-Formular

Das Microsoft RTF-Format

Das RTF wurde von Microsoft in den 80ziger Jahren als allgemeines Format zum Austausch von Textdokumenten definiert. In Microsoft-Produkten wird das RTF-Dateiformat seit vielen Jahren auf breiter Front unterstützt. So ist es z.B. auch schon sehr lange als Austauschformat für die Windows-Zwischenablage im Einsatz. Die Spezifikation ist vollständig offen gelegt.

Microsoft Word unterstützt RTF schon seit DOS Version 5.0. Seit der Einführung von Windows und Word für Windows gibt es nun die Möglichkeit, Formularfelder in Word-Dokumenten zu hinterlegen und Word über spezielle Schutzmechanismen auch so zu starten, dass nur solche Felder zu beschreiben sind.

CIB jView&form unterstützt auch die direkte Formularverarbeitung im RTF-Dateiformat ohne dass vorher ein PDF Dokument daraus erzeugt wurde. Hierzu ist die Property „rtfForm.Enabled“ zu aktivieren.

 

RTF-Formular mit MS-Word

MS-Office bietet für Formularfelder die folgenden Feldtypen an:

  • Textfelder (FORMTEXT)
  • Kontrollkästchen (FORMCHECKBOX)
  • Dropdown-Formularfeld (FORMDROPDOWN)

Von den CIB Modulen wird nur das Kontrollkästchen unterstützt.


5.3. Die Programmoberfläche

Nachdem das Programm gestartet wurde, öffnet sich das Hauptfenster der Anwendung. Nach dem Öffnen eines Formulardokuments können die Formularfelder ausgefüllt werden. Falls die Formularfelder nicht standardmäßig aktiviert sind, können sie über den Toolbar-Button „Formularfelder aktivieren“ zur Bearbeitung freigeschaltet werden.  Das Ausfüllen der Formularfelder ist in dieser Abbildung dargestellt.

Die einzelnen Menüpunkte sind:

-          Felder markieren: Checkbox um die Markierung der Felder zu de/aktivieren.

-          Markierungsfarbe: Anzeige der aktuellen Markierungsfarbe; durch Klick auf den Menüeintrag öffnet sich ein Farbdialog, um die Markierungsfarbe zu ändern.

-          Transparenz: Anzeige des aktuellen Transparenzgrads der Markierungsfarbe (0 – 255); durch Bewegen des Schiebereglers kann der Transparenzgrad geändert werden.

Die Toolbar des Programms enthält unter anderen einen Button, der für das Form-Modul wichtig ist:


Sind die Formularfelder aktiviert, werden sie mit der Markierungsfarbe hinterlegt angezeigt und können ausgefüllt oder der eventuell vorhandene Inhalt geändert werden.

Sind die Formularfelder deaktiviert, werden sie ohne Markierungsfarbe angezeigt und können nicht geändert werden.





5.4. Konfiguration durch Properties

Allgemeine Properties

Mit den folgenden Properties können generelle Einstellungen für die Applikation vorgenommen werden.

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_FORM_ENABLED

form.Enabled

Boolean

False

Diese Property legt fest, ob die Formular-Komponente aktiviert oder deaktiviert ist.

TRUE: In der Menüleiste erscheint das Menü „Formular“ und in der Toolbarleiste erscheint der Button „Formularfelder de/aktivieren”. Das Formular kann bearbeitet werden, wenn die Formularfelder aktiviert sind.

FALSE: Das Menü „Formular“ und der Toolbar-Button „Formularfelder de/aktivieren” wird nicht angeboten. Das Formular kann nicht bearbeitet werden.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_RTF_FORM_ENABLED

rtfForm.Enabled

Boolean

False

Diese Property legt fest, ob die Formular-Komponente für RTF-Formulare aktiviert oder deaktiviert ist.

TRUE: RTF-Formulare können bearbeitet werden. Derzeit werden nur Checkboxen in RTF-Formularen unterstützt.

FALSE: RTF-Formulare können nicht bearbeitet werden.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_FORM_MENU_ENABLED

formmenu.Enabled

Boolean

True

Diese Property legt fest, ob das Menü „Formular“ in der Menüleiste angezeigt wird oder nicht.

TRUE: In der Menüleiste erscheint das Menü „Formular“.

FALSE: In der Menüleiste wird das Menü „Formular“ nicht angezeigt.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_DEFAULT_FORM_HIGHLIGHTING_ENABLED

defaultformfieldhighlighting.Enabled

Boolean

True

Diese Property legt fest, ob die Formularfeldmarkierung beim Start aktiviert ist oder nicht.

TRUE: Die Formularfeldmarkierung ist beim Start aktiviert.

FALSE: Die Formularfeldmarkierung ist beim Start nicht aktiviert.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_DEFAULT_FORM_HIGHLIGHTING_COLOR

formfielddefaultcolor

Integer

7

Diese Property legt die Standardfarbe der Formularfeldmarkierung fest.
Mögliche Werte sind:

1 = rot
2 = gelb
3 = magenta
4 = cyan
5 = grau
6 = grün
7 = blau
8 = schwarz

Default: 7 = blau

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_DEFAULT_FORM_HIGHLIGHTING_COLOR_TRANSPARENCY

defaultformhighlightingcolortransparency

Integer

100

Diese Property legt die Standardtransparenz der Formularfeldmarkierung fest.
Mögliche Werte sind 0 – 255, wobei 0 = absolut transparent (nicht sichtbar), 255 = absolut überdeckend, d.h. mit höheren Werten nimmt die Transparenz ab und die Überdeckung zu.

Default: 100

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_FORM_SIGNED_LOCK_ENABLED

formSignedLock.Enabled

Boolean

True

Diese Property legt fest, ob das Ausfüllen der Formularfelder gesperrt wird, wenn in einem Formular mindestens ein Signaturfeld unterschrieben ist.

TRUE: Wenn in einem Formular mindestens ein Signaturfeld unterschrieben ist, wird das Ausfüllen der Formularfelder gesperrt und es erscheint eine Hinweismeldung.

FALSE: Das Ausfüllen der Formularfelder wird nicht gesperrt, auch wenn in einem Formular mindestens ein Signaturfeld unterschrieben ist.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_NOT_FILLED_FORM_WARNING

signNotFilledFormWarning.Enabled

Boolean

True

Diese Property legt fest, ob eine Hinweismeldung erscheint, wenn in einem nicht ausgefüllten Formular ein Signaturfeld unterschrieben wird.

TRUE: Wenn in einem nicht ausgefüllten Formular ein Signaturfeld unterschrieben wird, erscheint eine Hinweismeldung, dass danach keine weiteren Formularfelder ausgefüllt werden können.

FALSE: Wenn in einem nicht ausgefüllten Formular ein Signaturfeld unterschrieben wird, erscheint keine Hinweismeldung, dass danach keine weiteren Formularfelder ausgefüllt werden können.

 

 


6. Schneller Einstieg: Einbindung von JView&form&sign in eine Java Swing-Applikation

import java.awt.BorderLayout;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.util.List;

import javax.swing.Action;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

import com.cib.comod.jobs.ICibFormatJob;

import de.cib.gui.framework.ICibApplication;
import de.cib.gui.framework.ICibRecApplication;
import de.cib.gui.framework.JCibApplication;
import de.cib.gui.util.trace.JCibTrace;
import de.cib.view.modules.form.FormFieldCallback;
import de.cib.view.modules.form.FormFieldInfo;


public class JCibViewFormSignRunner {

	public static final String TEST_FILENAME = "test_form.pdf";

	public static void main(java.lang.String[] args) {
		// activate / deactivate traces
		JCibView.enableDebug(true);
		JCibTrace.setTraceLevel(JCibTrace.LEVEL_INFO);
		 
		// create a new viewer instance
		JCibView viewer = new JCibView();
		
		// set license information to the viewer
		setLicenseInformation(viewer);
		
		// set input file (optional)
		viewer.setProperty(ICibApplication.PROPERTY_INPUTFILE, TEST_FILENAME);
		
		// create a new jrec2 instance and set properties
		initJrec2(viewer);
		
		// set programmatically properties to the viewer
		setViewerProperties(viewer);
		
		// set properties for &form
		setFormProperties(viewer);
		
		// set properties for &sign
		setSignProperties(viewer);
		
		// set properties to the viewer given by command line
		setCommandLineProperties(viewer, args);
		
		// create and show GUI
		createAndShowGUI(viewer);
		
		// register FormFieldCallbackTester
		viewer.setFormFieldCallback(new FormFieldCallbackTester());

	}

	private static void createAndShowGUI(final JCibView viewer) {

		// create a test jframe to embedd the viewer in it.
		final JFrame viewerFrame = createViewerFrame();

		// connect the test frame to the viewer
		viewer.setFrame(viewerFrame);
		viewerFrame.getContentPane().add(viewer, BorderLayout.CENTER);

		// couple window closing to exit hook of viewer application
		viewerFrame.setDefaultCloseOperation(
			WindowConstants.DO_NOTHING_ON_CLOSE);
		viewerFrame.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				Action t_action = viewer.getActionMap()
					.get(ICibApplication.ACTION_EXIT);
				if (t_action != null) 
					t_action.actionPerformed(null);

				System.exit(0);
			}
		});

		// here special exit operations can be implemented 
		// which will be executed when the viewer gets closed
		viewer.setExitHook(new Runnable() {
			public void run() {
				// do post processing here
				viewer.stop();

				// unregister FormFieldCallbackTester
				viewer.setFormFieldCallback(null);
			}
		});

		// start and run the viewer
		viewer.load();
		viewer.start();

		// show frame in which the viewer is embedded
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				viewerFrame.setVisible(true);
			}
		});
	}

	private static void initJrec2(JCibView viewer) {
		// create jrec2 instance without starting it
		JCibApplication t_cibRec = viewer.getRec(false);
		if (t_cibRec != null) {
			// embedded jrec2 doesn't need Jrec-Ini file
			t_cibRec.setProperty(ICibRecApplication.
				PROPERTY_JREC_INIFILENAME, null);

			// Activate OK/Cancel icons in JRec toolbar
			t_cibRec.setProperty(ICibRecApplication.
				PROPERTY_REC_SHOW_OK_CANCEL_ICON, Boolean.TRUE);

			// Enable hyphenation
			t_cibRec.setProperty(ICibRecApplication.
				PROPERTY_HYPHENATION_ENABLED, Boolean.TRUE);
			
			// Set hyphenation dictionary path
			t_cibRec.setProperty(ICibRecApplication.
				PROPERTY_HYPHENATION_DICTIONARY_PATH, "./lib/dict/");
			
			// Enable spell checking
			t_cibRec.setProperty(ICibRecApplication.
				PROPERTY_SPELLCHECKING_ENABLED, Boolean.TRUE);
			
			// Set spell checking dictionary path
			t_cibRec.setProperty(ICibRecApplication.
					PROPERTY_SPELLCHECKING_DICTIONARY_PATH, 
					"./lib/dict/");

			try {
				String currentDir = new java.io.File(".")
					.getCanonicalPath();
				currentDir += "/lib";
				JCibTrace.info("Current lib directory: " 
					+ currentDir);
				currentDir += "/win32";
				t_cibRec.setProperty(ICibRecApplication.
					PROPERTY_SPELLCHECKING_NATIVE_LIBRARY_PATH, 
					currentDir);
				t_cibRec.setProperty(ICibRecApplication.
					PROPERTY_SPELLCHECKING_LANGUAGE, "de_DE");
			} catch (IOException e) {
				e.getMessage();
			}
		}
	}

	private static JFrame createViewerFrame() {
		JFrame res = new JFrame();
		res.setTitle("CIB JView&form&sign");
		
		// 75 % of the screen width and height 
		int frameWidth = (int) ((Toolkit.getDefaultToolkit()
			.getScreenSize().getWidth()) * 0.75);
		int frameHeight = (int) ((Toolkit.getDefaultToolkit()
			.getScreenSize().getHeight()) * 0.75);
		
		// restore the frame's last position
		res.setSize(frameWidth, frameHeight);
		return res;
	}
	
	private static void setLicenseInformation(JCibView viewer) {
		viewer.setProperty(ICibFormatJob.PROPERTY_LICENSECOMPANY, "");
		viewer.setProperty(ICibFormatJob.PROPERTY_LICENSEKEY, "");
	}
	
	private static void setViewerProperties(JCibView viewer) {
		viewer.setProperty(
			ICibApplication.PROPERTY_MENU_ENABLED, Boolean.FALSE);

		viewer.setProperty(
			ICibApplication.PROPERTY_DRAG_AND_DROP_ENABLED, 
			Boolean.TRUE);

		viewer.setProperty(
			ICibApplication.PROPERTY_SHOWJPRINTDIALOG, Boolean.FALSE);

		viewer.setProperty(
			ICibApplication.PROPERTY_THUMBNAILS_ENABLED, Boolean.TRUE);
	}
	
	private static void setFormProperties(JCibView viewer){
		
		viewer.setProperty(
			ICibApplication.PROPERTY_FORM_ENABLED, Boolean.TRUE);
		
		/*
		 * Type: Integer: 1=red, 2=yellow, 3=magenta, 4=cyan, 
		 * 5=gray, 6=green, 7=blue, 8=back.
		 * Default: 7
		 */
		viewer.setProperty(ICibApplication.
			PROPERTY_DEFAULT_FORM_HIGHLIGHTING_COLOR, 6);

		/*
		 * Type: Integer: 0-255
		 * Default: 100
		 */
		viewer.setProperty(ICibApplication.
			PROPERTY_DEFAULT_FORM_HIGHLIGHTING_COLOR_TRANSPARENCY, 75);
	
		/* 
		 * Type: Boolean
		 * Default: true
	 	 */
//		viewer.setProperty(ICibApplication.
//			PROPERTY_FORM_SIGNED_LOCK_ENABLED, Boolean.FALSE);
		
	}
	
	private static void setSignProperties(JCibView viewer){
		/* 
		 * Type: Boolean
		 * Default: false
	 	 */
		viewer.setProperty(ICibApplication.
			PROPERTY_SIGN_ENABLED, Boolean.TRUE);

		/* 
		 * Type: Boolean
		 * Default: true
		 */
		viewer.setProperty(ICibApplication.
			PROPERTY_SIGN_FREE_SIGN_ENABLED, Boolean.FALSE);

		/* 
		 * Type: String
		 * Default: ""
	 	 */
		viewer.setProperty(ICibApplication.
			PROPERTY_SIGN_PAD_PROVIDER, "signotec-signpad");
		/* 
		 * Type: Boolean
		 * Default: true
		 */
//		viewer.setProperty(ICibApplication.
//			PROPERTY_SIGN_NOT_FILLED_FORM_WARNING, Boolean.FALSE);

		/* 
		 * Type: Integer
		 * Default: 3000 Bytes
		 */
		viewer.setProperty(ICibApplication.
			PROPERTY_SIGN_REQUIRED_SIZE, 1000);
		
		// Generate DigSig fields (RTF case)
		viewer.setProperty("UseDigitalSignatureWidgets", 1);
		viewer.setProperty("NeedAppearancesSignatureWidgets", 0);
		
	}
	
	private static void setCommandLineProperties(

		JCibView viewer, String[] args) {
		// set properties which were set via command line
		if (args.length == 0) 
			return;
		
		for (int i = 0; i < args.length; i++) {
			String argument = args[i];
			if (argument == null)
				continue;

			// ignore tracing, it is set to true by default
			if (argument.equals("-t"))
				continue;

			// a property is set as "-propertyname value" 
			// or as "inputfile" 
			if (argument.startsWith("-")) {
				viewer.setProperty(argument.substring(1), args[i+1]);
				i++;
			} else {
				viewer.setProperty(ICibApplication.
					PROPERTY_INPUTFILE, args[i]);
			}
		}
	}
}

7. Schneller Einstieg: Dynamische Anbindung an die Formularkomponente JView&form

In CIB JView sind auch Funktionen zur Anbindung an die  Formularkomponente JView&form integriert.

Dazu sind Datenstrukturen und Callback-Methoden definiert, die in den folgenden Abschnitten beschrieben werden.

Interface FormFieldInfo zum Austausch von Informationen über ein Formularfeld

Die Datenstruktur FormFieldInfo dient zum Austausch von Informationen über ein Formularfeld, sie ist im CIB jView (package de.cib.view.modules.form) definiert.

Interface FormFieldInfo (extends FieldInfo):

package de.cib.view.modules.form;

import de.cib.view.modules.FieldInfo;

 

/**

 * Interface representing the form field info for information exchange.

 *

 * It allows information exchange about a list of form fields e.g. via

 * interface FormFieldCallback.

 * @see FieldInfo

 * @see FormFieldCallback

 */

public interface FormFieldInfo extends FieldInfo {

 

      public Object getContent();

 

      public void setContent(Object content);

 

      public Object getStates();

}

 

Interface FieldInfo:

package de.cib.view.modules;

 

/**

 * Interface representing the field info.

 *

 * It allows information exchange about a field.

 *

 */

public interface FieldInfo {

 

      public boolean isMandatory();

 

// Setter for setMandatory - for later use

//    public void setMandatory(boolean isMandatory);

 

      public String getType();

 

      public String getName();

 

      public String getTooltip();

 

      public void setTooltip(String tooltip);

 

      public int getCount();

 

      public boolean isLocked();

 

// Setter for setLocked - for later use

//    public void setLocked(boolean isLocked);

}

Interface FormFieldCallback mit Callback-Methoden zur Information über die Anzahl und den Status der Formularfelder sowie ihre Aktualisierung

Zur Information über die Anzahl und den Status der Formularfelder und ihre Aktualisierung wird eine Datenstruktur FormFieldInfo sowie ein Interface FormFieldCallback eingeführt.

Das Interface FormFieldCallback ist eine Erweiterung des Interfaces FieldCallback:

Interface FieldCallback:

package de.cib.view.modules;

 

/**

 * Interface FieldCallback

 *

 * This interface is used to exchange information about current fields.

 *

 */

public interface FieldCallback {

 

      public static final int ON_LOAD = 1;

     

      public static final int ON_SAVE = 2;

 

      public static final int ON_EXIT = 8;


Der Aufrufer muss sich dazu bei der JView-Instanz als Listener anmelden.

Es gibt verschiedene Zeitpunkte, zu denen die Aufrufe des FormFieldCallback an den Listener geschickt werden, was durch den Parameter „eventType“ signalisiert wird:

-          ON_LOAD – beim Laden eines Dokuments

-          ON_SAVE – beim Speichern eines Dokuments

-          ON_EXIT – beim Beenden des Viewers

Welches Dokument geladen oder gespeichert wird, wird im Parameter „fileName“ mitgeteilt.

Das Interface FormFieldCallback ist im CIB jView (package de.cib.view.modules.form) definiert und umfasst folgende Methoden.

Interface FormFieldCallback:

package de.cib.view.modules.form;

 

import java.util.List;

 

/**

 * Interface FormFieldCallback

 *

 * This interface is used to exchange information about current form fields.

 *

 */

public interface FormFieldCallback extends FieldCallback {

 

      /**

       * Notifies about the current number of logical form fields

       * @param countFormFields

       * @param fileName

       * @param eventType

       */

      public void numberOfFormFields(int countFormFields,
            String fileName, int eventType);

     

      /**

       * Provides the list of FormFieldInfo for all logical form fields.

       * It allows to read and update current values for each form field.

       *

       * @param formFieldInfoList

       * @param fileName

       * @param eventType

       * @return true if successful otherwise false

       */

      public boolean updateFormFieldInformation(
            List<FormFieldInfo> formFieldInfoList,
            String fileName, int eventType);

Code-Beispiel zum Setzen eines FormFieldCallback Listeners bei der JView-Instanz:

// Definition eines FormFieldCallback Listeners

      static class FormFieldCallbackTester implements FormFieldCallback {
           

            public void numberOfFormFields(int countFormFields,
                  String fileName, int eventType)
            {

                  JCibTrace.info("FormFieldCallback - numberOfFormFields = "
                              + countFormFields + ", fileName = " + fileName
                              + ", eventType = " + eventType);

            }

 

            public boolean updateFormFieldInformation(
                  List<FormFieldInfo> formFieldInfoList,
                  String fileName, int eventType)
            {

                  JCibTrace.info("FormFieldCallback -
                        updateFormFieldInformation: fileName = " + fileName
                        + ", eventType = " + eventType);

                  // Example how to read and update form field information

                  if (formFieldInfoList == null)

                        return false;

                  if (eventType == FormFieldCallback.ON_LOAD) {
                        int i = 0;

                        for (FormFieldInfo info : formFieldInfoList) {

                              i++;

                              JCibTrace.info("Read form field " +info.getName()
                                   + ", Type = " + info.getType()
                                   + ", Content = " + info.getContent()
                                   + ", Tooltip = " + info.getTooltip()
                                    + ", isMandatory = " + info.isMandatory()
                                   + ", isLocked = " + info.isLocked());

                              info.setTooltip("Tooltip-" + info.getName());
                              boolean isEvenIndex = (i % 2 == 0);

                              if ("Text".equals(info.getType())) {

                                   info.setContent("Con-" + i);

                                   // Set each text field with even index to
                                   // mandatory, with odd index to optional

                                   info.setMandatory(isEvenIndex);

                              }

                              else if ("Check".equals(info.getType())) {

                                   // Deactivate all check boxes for even index

                                   // else activate last check box of group
                                   if (isEvenIndex)
                                         info.setContent(0);
                                   else
                                         info.setContent(info.getCount());
                              }

                              else if ("Radio".equals(info.getType())) {

                                   // Deactivate radio buttons for even index

                                   // else activate last radio button of group
                                   if (isEvenIndex)
                                         info.setContent(0);
                                   else
                                         info.setContent(info.getCount());
                              }

                              info.setTooltip("Tooltip-" + info.getName());

                              JCibTrace.info("Form field changed: Content = "
                                   + info.getContent()
                                   + ": Tooltip = " + info.getTooltip());                           }

                  }

                  else if (eventType == FormFieldCallback.ON_SAVE) {

                        for (FormFieldInfo info : formFieldInfoList) {

                              JCibTrace.info("Read form field " +info.getName()
                                   + ": Type = " + info.getType()
                                   + ": Content = " + info.getContent()
                                   + ", isMandatory = " + info.isMandatory()
                                   + ", isLocked = " + info.isLocked());

                        }

                  }

                  else if (eventType == FormFieldCallback.ON_EXIT) {

                        for (FormFieldInfo info : formFieldInfoList) {

                              JCibTrace.info("Read form field " +info.getName()
                                   + ": Type = " + info.getType()
                                   + ": Content = " + info.getContent()
                                   + ", isMandatory = " + info.isMandatory()
                                   + ", isLocked = " + info.isLocked());

                        }

                  }

                  return true;

            }

      }

 

      // Beim Start von JView

            // Register FormFieldCallback Listener

            viewer.setFormFieldCallback(new FormFieldCallbackTester());

      ...

 

      // Beim Beenden von JView

            // do post processing here

            viewer.stop();

            // Unregister FormFieldCallback Listener

            viewer.setFormFieldCallback(null);
      ...

 

 


7.1. Interface FormFieldInfo zum Austausch von Informationen über ein Formularfeld

Die Datenstruktur FormFieldInfo dient zum Austausch von Informationen über ein Formularfeld, sie ist im CIB jView (package de.cib.view.modules.form) definiert.

Interface FormFieldInfo (extends FieldInfo):
package de.cib.view.modules.form;
import de.cib.view.modules.FieldInfo;
 
/**
 * Interface representing the form field info for information exchange.
 *
 * It allows information exchange about a list of form fields e.g. via
 * interface FormFieldCallback.
 * @see FieldInfo
 * @see FormFieldCallback
 */
public interface FormFieldInfo extends FieldInfo {
 
      public Object getContent();
 
      public void setContent(Object content);
 
      public Object getStates();
}




7.2. Interface FormFieldCallback mit Callback-Methoden zur Information über die Anzahl und den Status der Formularfelder sowie ihre Aktualisierung

Zur Information über die Anzahl und den Status der Formularfelder und ihre Aktualisierung wird eine Datenstruktur FormFieldInfo sowie ein Interface FormFieldCallback eingeführt.

Das Interface FormFieldCallback ist eine Erweiterung des Interfaces FieldCallback:

Interface FieldCallback:

package de.cib.view.modules;
 
/**
 * Interface FieldCallback
 *
 * This interface is used to exchange information about current fields.
 *
 */
public interface FieldCallback {
 
      public static final int ON_LOAD = 1;
     
      public static final int ON_SAVE = 2;
 
      public static final int ON_EXIT = 8;
}