CIB jView sign technischer Leitfaden

Site: CIB eLearning
Course: CIB jView sign
Book: CIB jView sign technischer Leitfaden
Printed by: Guest user
Date: Monday, 6 May 2024, 10:43 AM

1. Lieferumfang

Modul

Softwareumfang

CIB Jview&sign

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

 

Das Modul steht nur unter Windows zur Verfügung, da die dafür benötigten nativen Bibliotheken für andere Betriebssysteme nicht vorhanden sind.


CIB jview&sign für Windows

Zusätzlich zu den im Technischen Leitfaden für CIB Jview beschriebenen Komponenten enthält das sign-Modul die folgenden Komponenten: 

Verzeichnis

Datei

Inhalt

CIBJview

cibpad.ini

INI-Datei um die erforderlichen SignPad-Keys zu initialisieren

 

<certificate>.p12

Zertifikat-Datei: nur für DigSig erforderlich

CibJview\lib\win32

CibPad32.dll

Native Windows-Bibliothek für die Kommunikation mit der SignPad-Hardware


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.


2.1. CIB jview&sign - Allgemein

CIB jview&sign ist eine Erweiterung des von der CIB software GmbH entwickelten Dokument-Viewers „CIB jview“. Diese Erweiterung schafft die Möglichkeit, elektronische Signaturen in elektronische Dokumente integrieren zu können. 

Zusammenfassung Hauptfunktionalitäten:

  • Unterschreiben von eingebetteten CIBSig/DigSig-Feldern in PDF-Dokumenten.
  • Unterschreiben von eingebetteten CIBSig-Feldern in RTF-Dokumenten.
  • Öffnen von PDF-Dokumenten, die teilweise oder komplett unterschrieben sind.
  • Einbetten freier anpassbarer Signaturfelder in PDF-Dokumenten.
  • Einbetten freier anpassbarer Signaturfelder in RTF-Dokumenten.
  • Navigieren zwischen Signaturfeldern.
  • Anzeigen einer unterschriebenen Seite auf PAD.
  • Zulassen einen bestimmten Bereich zu unterschreiben.
  • Drucken eines unterschriebenen Dokuments.


2.2. Die Programmoberfläche

Nachdem das Programm gestartet wurde, öffnet sich das Hauptfenster der Anwendung, welches in der Abbildung dargestellt ist.



Die Toolbar des Programms enthält unter anderen zwei Buttons die für das Sign-Modul wichtig sind:


Navigationsbutton


Freie Signatur-Button

 

Nach Klick auf den Navigationsbutton wird zum ersten nicht unterschriebenen Signaturfeld gesprungen und die Signatur-Toolbar (der Signatur-Dialog) angezeigt. Ebenso wird durch Doppelklicken auf ein Signaturfeld die Signatur-Toolbar für dieses Signaturfeld angezeigt.

Die Position des Signatur- Dialogs kann durch die Property PROPERTY_SIGN_DIALOG_POSITION („signDialogPosition“) festgelegt werden. Mögliche Werte für die Dialog-Position sind:

0 = oberhalb, 1 = unterhalb, 2 = links, 3 = rechts (vom Signaturfeld)

Default: Die Signatur-Toolbar wird oberhalb des Signaturfelds angezeigt.

Abhängig von der Position wird die Signatur-Toolbar entweder horizontal oder vertikal angezeigt.


Signatur-Toolbar horizontal bei Position oberhalb/unterhalb des Signaturfelds:


Signatur-Toolbar vertikal bei Position links/rechts vom Signaturfeld:


Die Buttons haben folgende Funktionalität:


Signatur starten.


Signatur speichern.


Signatur-Informationen (Name, Grund, Ort, Ausrichtung) anzeigen und bearbeiten (siehe unten).


Signaturfeld aktualisieren.


Zum vorherigen Signaturfeld navigieren.


Zum nachfolgenden Signaturfeld navigieren.


Signatur abbrechen oder Signatur-Dialog schließen.


Beim Klick auf den Button „Signatur-Informationen“ werden die entsprechenden Felder mit ihrer Vorbelegung angezeigt. Die Feldinhalte können hier geändert werden. Beim Speichern der Signatur werden die Signatur-Informationen mit abgespeichert.

 

Bei horizontalem Dialog werden die Informationen unterhalb des Signatur-Dialogs angezeigt:



Bei vertikalem Dialog werden die Informationen rechts bzw. links neben dem Signatur-Dialog angezeigt:



Bei Dialogposition rechts vom Signaturfeld werden die Informationen links, bei Dialogposition links werden sie rechts vom Signatur-Dialog angezeigt. Somit ist sichergestellt, dass für das Informationsfenster immer genügend Platz auf dem Bildschirm vorhanden ist.


2.3. 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_SIGN_ENABLED

sign.Enabled

Boolean

False

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

TRUE: Im Menü erscheint der Menüeintrag „Signatur“ und in der Toolbarleiste erscheinen die Buttons „n Feld(er) zu signieren“ und „Signaturfeld aufziehen”.

FALSE: Der Menüeintrag „Signatur“ und die Toolbar-Buttons „n Feld(er) zu signieren“ und „Signaturfeld aufziehen” werden nicht angeboten.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_MENU_ENABLED

signmenu.Enabled

Boolean

True

Diese Property legt fest, ob das Signatur-Menü aktiviert oder deaktiviert ist.

TRUE: Das Signatur-Menü ist sichtbar.

FALSE: Das Signatur-Menü ist ausgeblendet.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_RESIGN_ENABLED

resign.Enabled

Boolean

True

Diese Property legt fest, ob das Nacherfassen einer Signatur möglich ist.

TRUE: Das Nacherfassen einer Signatur ist möglich.

FALSE: Das Nacherfassen einer Signatur ist nicht möglich.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_SHOW_SIGN

showsign.Enabled

Boolean

True

Diese Property legt fest, ob die Signatur-Vorschau nach dem Unterschreiben aktiviert ist.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_SHOW_PAGE_ON_PAD

showSignPageOnPad.Enabled

Boolean

False

Diese Property legt fest, ob die Seiten-Vorschau auf dem Signatur-Pad während des Unterschreibens aktiviert ist.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_PAD_SIGNATURECERTIFICATE

pad.SignatureCertificate

String

""

Diese Property legt das Signatur-Zertifikat für das Signatur-Pad fest.

Durch diese Property wird das Signatur-Zertifikat für das Signatur-Pad angegeben.

Default: Leerstring, es wird kein Signatur-Zertifikat für das Signatur-Pad gesetzt.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_PAD_SIGNATUREPRIVATEPASSWORD

pad.SignaturePrivatePassword

String

""

Diese Property legt das Signatur-Passwort für das Signatur-Pad fest.

Durch diese Property wird das Signatur-Passwort für das Signatur-Pad angegeben.

Default: Leerstring, es wird kein Signatur-Passwort für das Signatur-Pad gesetzt.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_PAD_HARDWARELICENCE

pad.HardwareLicence

String

""

Diese Property legt die Hardware-Lizenz für das Signatur-Pad fest.

Durch diese Property wird die Hardware-Lizenz für das Signatur-Pad angegeben.

Default: Leerstring, es wird keine Hardware-Lizenz für das Signatur-Pad gesetzt.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_PAD_SIGNAPILICENCE

pad.SignApiLicence

String

""

Diese Property legt die API-Lizenz für das Signatur-Pad fest.

Durch diese Property wird die API-Lizenz für das Signatur-Pad angegeben.

Default: Leerstring, es wird keine API-Lizenz für das Signatur-Pad gesetzt.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_PAD_PROVIDER

pad.Provider

String

""

Diese Property legt den Signatur-Pad Provider fest.

Durch diese Property wird der Name des Signatur-Pad Providers angegeben.

Default: Leerstring, es wird kein Signatur-Pad Provider gesetzt.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_FREE_SIGN_ENABLED

freesign.Enabled

Boolean

True

Diese Property legt fest, ob das Aufziehen eines freien Signaturfelds erlaubt ist.

TRUE: In der Toolbarleiste erscheint ein Button "Signaturfeld aufziehen".

FALSE: Der Toolbar-Button "Signaturfeld aufziehen" wird nicht angeboten.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_REQUIRED_FIRST

signRequiredFirst.Enabled

Boolean

False

Legt fest, ob zuerst durch die notwendigen Signaturfelder navigiert wird.

TRUE: Zuerst wird durch die notwendigen Signaturfelder navigiert.

FALSE: Durch die Signaturfelder wird in der normalen Reihenfolge navigiert.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_DIALOG_POSITION

signDialogPosition

Integer

0

Legt die Position des Signaturdialogs relativ zu dem jeweils auszufüllenden Signaturfeld fest.

Mögliche Werte: 0 = oberhalb, 1 = unterhalb, 2 = links, 3 = rechts vom Signaturfeld.

Default: Der Signaturdialog wird oberhalb des Signaturfelds angezeigt.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_START_ON_FLY

startSignOnFly.Enabled

Boolean

False

Legt fest, ob der Signaturvorgang direkt nach der Navigation zu einem Signaturfeld gestartet wird.

TRUE: Nachdem zu einem noch nicht unterschriebenen Feld navigiert wurde, wird sofort der Signaturvorgang gestartet.

FALSE: Der Benutzer muss nach dem Navigieren den Signaturvorgang selbst starten, indem er im Signaturdialog auf den Start-Button klickt.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_OVERWRITE_OUTPUTFILE_ENABLED

overwriteOutputfile.Enabled

Boolean

False

Legt fest, dass beim Speichern der ersten Signatur kein Abfrage-Dialog erscheint, wenn das Outputfile bereits existiert.

TRUE: Beim Speichern der ersten Signatur erscheint ein Abfrage-Dialog, wenn das Outputfile bereits existiert.

FALSE (Default): Beim Speichern der ersten Signatur erscheint kein Abfrage-Dialog, wenn das Outputfile bereits existiert.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_SAVE_AND_NEXT

saveSignAndNext.Enabled

Boolean

True

Legt fest, ob direkt nach dem Speichern einer Signatur zum nächsten nicht ausgefüllten Signaturfeld navigiert wird.

TRUE: Direkt nach dem Speichern einer Signatur wird zum nächsten nicht ausgefüllten Signaturfeld navigiert.

FALSE: Nach dem Speichern einer Signatur wird nicht zum nächsten Signaturfeld navigiert.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_SAVE_AND_CLOSE

saveSignAndClose.Enabled

Boolean

False

Legt fest, ob das Dokument nach dem Speichern einer Signatur geschlossen wird.

TRUE: Das Dokument wird nach dem Speichern einer Signatur geschlossen.

FALSE: Das Dokument wird nur geschlossen, wenn das letzte Feld unterschrieben ist.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_PRINT_ON_SAVE

printSignOnSave.Enabled

Boolean

False

Legt fest, ob das Dokument nach dem Speichern einer Signatur gedruckt wird.

TRUE: Das Dokument wird nach dem Speichern einer Signatur gedruckt.

FALSE: Das Dokument wird nur gedruckt, wenn das letzte Feld unterschrieben ist.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_PRINTER_NAME

printer.name.Enabled

String

„“

Legt den Druckernamen für das Drucken des Dokuments nach dem Speichern der letzten Signatur fest.

Default: Leerstring, d.h. für das Drucken des Dokuments ist kein Druckername gesetzt.

Falls ein Druckername gesetzt und die Property PROPERTY_SIGN_PRINT_ON_SAVE aktiviert ist, wird das Dokument auf den angegebenen Drucker gedruckt, wenn das letzte Feld unterschrieben ist.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_EXISTING_SIGNFIELD_WARNING

existingSignFieldWarning.Enabled

Boolean

True

Legt fest, ob eine Warnung erscheint, wenn kein Signaturfeld da ist.

TRUE: Eine Warnung erscheint, wenn kein Signaturfeld da ist.

FALSE: Wenn kein Signaturfeld da ist, erscheint keine Warnung.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_DIGSIG_GENERATED_FIELD

generatedDigSigField.Enabled

Boolean

False

Legt fest, ob ein selbst aufgezogenes Feld als DigSig unterschrieben werden kann.

TRUE: Erlaubt es, ein selbst aufgezogenes Feld als DigSig zu unterschreiben.

FALSE: Erlaubt es nicht, ein selbst aufgezogenes Feld als DigSig zu unterschreiben.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_REQUIRED_SIZE

signRequiredSize

Integer

3000

Legt die mindestens benötigte Grösse der Biodaten (in Byte) fest.

Wenn diese Mindestgröße beim Leisten der Signatur unterschritten wird, ist die Signatur nicht gültig und kann nicht gespeichert werden.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_REQUIRED_SIZE_ENABLED

signRequiredSize.Enabled

Boolean

True

Legt fest, ob die Property PROPERTY_SIGN_REQUIRED_SIZE ausgewertet wird.

TRUE: Wenn die in PROPERTY_SIGN_REQUIRED_SIZE gesetzte Mindestgröße beim Leisten der Signatur unterschritten wird, ist die Signatur nicht gültig und kann nicht gespeichert werden.

FALSE: Es gibt keine Mindestgröße beim Leisten der Signatur.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_READ_INFO

signReadInfo.Enabled

Boolean

True

Legt fest, ob die Signatur-Information (Name, Grund, Ort, Ausrichtung) aus der Vorbelegung durch den Signatur-Callback gelesen wird.

TRUE: Die Signatur-Information (Name, Grund, Ort, Ausrichtung) wird aus der Vorbelegung durch den Signatur-Callback gelesen.

FALSE: Die Signatur-Information (Name, Grund, Ort, Ausrichtung) wird nicht aus der Vorbelegung durch den Signatur-Callback gelesen.

 

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.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_SIGNATURE_ALIGNMENT

signature.alignment

String

2

Legt fest, mit welcher Ausrichtung die Signatur innerhalb des Signaturfeldes gespeichert wird.

1 = Die Signatur wird linksbündig gespeichert
2 = Die Signatur wird zentriert gespeichert (Default)
3 = Die Signatur wird rechtsbündig gespeichert

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_USEWINTAB

sign.UseWintab

String

0

Diese Property legt fest, ob zur Signaturerfassung kein Signatur-Eingabegerät (Signaturpad), also z.B. ein Windows-Tablet verwendet wird.

0 (Default): Zur Signaturerfassung wird ein Signatur-Eingabegerät (Signaturpad) verwendet.

1: Zur Signaturerfassung ist kein Signatur-Eingabegerät, sondern z.B. ein Windows-Tablet vorgesehen. Falls der PC kein Tablet ist und ein Signaturpad angeschlossen ist, wird dieses angesteuert und verwendet.

7: Zur Signaturerfassung wird in jedem Fall ein Windows-Tablet angesteuert und verwendet. Falls der PC kein Tablet ist, erscheint eine Fehlermeldung, auch wenn ein Signaturpad angeschlossen ist.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_SELECT_DIALOG

sign.SelectDialog

String

Standard

Diese Property legt die Art des angezeigten Signaturdialogs fest.

Standard (Default): Zur Signaturerfassung wird der Standard-Dialog verwendet.

Extended: Zur Signaturerfassung wird der erweiterte Dialog auf dem Signatur-Display verwendet.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_ACCEPT_BUTTONTEXT

sign.AcceptButtonText

String

OK

Diese Property legt Text des angezeigten Accept-Buttons fest.

<Text>: Im Signatur-Dialog wird als Accept-Button-Text der angegebene Text angezeigt.

(Default): Im Signatur-Dialog wird als Accept-Button-Text „OK“ angezeigt.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_CANCEL_BUTTONTEXT

sign.CancelButtonText

String

Abbrechen

Diese Property legt Text des angezeigten Cancel-Buttons fest.

<Text>: Im Signatur-Dialog wird als Cancel-Button-Text der angegebene Text angezeigt.

(Default): Im Signatur-Dialog wird als Cancel-Button-Text „Abbrechen“ angezeigt.

 

 

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_REPEAT_BUTTONTEXT

sign.RepeatButtonText

String

Wiederholen

Diese Property legt Text des angezeigten Repeat-Buttons fest.

<Text>: Im Signatur-Dialog wird als Repeat-Button-Text der angegebene Text angezeigt.

(Default): Im Signatur-Dialog wird als Repeat-Button-Text „Wiederholen“ angezeigt.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_WINDOWTEXT

sign.WindowText

String

Unterschrift

Diese Property legt den Text für den Titel des Dialogfensters fest, das zur Signaturerfassung angezeigt wird.

<Text>: Im Signatur-Dialog wird als Titel der angegebene Text angezeigt.

(Default): Falls die Property nicht gesetzt ist, wird als Titel „Unterschrift“ angezeigt.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_PAD_TEXT

LcdText

String

„“

Diese Property legt den Text fest, der auf dem Signaturpad angezeigt wird.

<Text>: Auf dem Signaturpad wird der angegebene Text angezeigt.

(Default): Auf dem Signaturpad wird kein Text angezeigt.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_PAD_TEXT_NAME_REASON

LcdTextNameReason

Boolean

False

Diese Property legt fest, ob Name und Grund jedes Signaturfelds als Text auf dem Signaturpad angezeigt wird.

TRUE: Name und Grund jedes Signaturfelds werden als Text auf dem Signaturpad angezeigt, falls diese nichtleer sind. Andernfalls wird der in der Property PROPERTY_SIGN_PAD_TEXT festgelegte Text angezeigt.

FALSE (Default): Auf dem Signaturpad wird der in der Property PROPERTY_SIGN_PAD_TEXT festgelegte Text angezeigt.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_PAD_TEXTXPOS

LcdTextXPos

String

0

Diese Property legt die X-Position des auf dem Signaturpad angezeigten Texts fest.

<X>: Der auf dem Signaturpad angezeigte Text beginnt ab der angegebenen X-Position.

(Default): Der auf dem Signaturpad angezeigte Text beginnt ab der X-Position 0.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_PAD_TEXTYPOS

LcdTextYPos

String

0

Diese Property legt die Y-Position des auf dem Signaturpad angezeigten Texts fest.

<Y>: Der auf dem Signaturpad angezeigte Text beginnt ab der angegebenen Y-Position.

(Default): Der auf dem Signaturpad angezeigte Text beginnt ab der Y-Position 0.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_PAD_TEXTFONTNAME

LcdTextFontName

String

Arial

Diese Property legt die Schriftart des auf dem Signaturpad angezeigten Texts fest.

<FontName>: Der auf dem Signaturpad angezeigte Text wird in der Schriftart „FontName“ angezeigt.

 (Default): Die Standardschriftart ist Arial

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_PAD_TEXTFONTSIZE

LcdTextFontSize

String

12

Diese Property legt die Schriftgröße des auf dem Signaturpad angezeigten Texts fest.

<FontSize>: Der auf dem Signaturpad angezeigte Text wird in der Schriftgröße „FontSize“ angezeigt.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_PAD_TEXTFONTSTYLE

LcdTextFontStyle

String

Normal

Diese Property legt den Schriftstil des auf dem Signaturpad angezeigten Texts fest.

<FontStyle>: Der auf dem Signaturpad angezeigte Text wird im Schriftstil „FontStyle“ angezeigt.

Mögliche Werte für Font-Style sind „Normal“, „Bold“, „Italic“, „Underline“. Kombinationen dieser Schriftstile sind nicht möglich.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_CONTROLMIRRORDISPLAY

sign.ControlMirrorDisplay

String

"1"

Diese Property legt fest, wie der Inhalt des LCD-Displays im Kontrollelement angezeigt wird.

Mögliche Werte:

"0" = Keine Anzeige im Kontrollelement

"1" = Die Signatur wird in Echtzeit im Kontrollelement angezeigt.

"2" = Die Signatur sowie Bitmaps und Text werden in Echtzeit im Kontrollelement angezeigt.

(Default): "1"

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_PAD_FILENAME

LcdFileName

String

„“

Diese Property legt den Dateinamen der auf dem Signaturpad angezeigten Bitmap fest.

<FileName>: Auf dem Signaturpad wird die in der Datei <FileName> enthaltene Bitmap angezeigt.

(Default): Auf dem Signaturpad wird keine Bitmap angezeigt.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_PAD_PENWIDTH

LcdPenWidth

String

"12"

Diese Property legt die Linienbreite der auf dem Signaturpad erfassten Signatur fest.

<PenWidth>: Die auf dem Signaturpad erfasste Signatur hat die angegebene Linienbreite.

(Default): Die auf dem Signaturpad erfasste Signatur hat die Linienbreite 12.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_SENSORSIGNRECT

sign.SensorSignRect

String

"0;0;0;0"

Diese Property legt das Rechteck zur Signaturerfassung auf dem Signaturpad fest.

Werte: "<left>;<top>;<right>;<bottom>"

(Default): "0;0;0;0".

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_PAD_STANDBYNAME

LcdStandbyName

String

""

Diese Property setzt den Dateinamen der auf dem Signaturpad permanent angezeigten Bitmap.

(Default): Leerstring, d.h. es wird keine neue Bitmap gesetzt.

 

Property-Bezeichnung

Property-Text

Typ

Default

PROPERTY_SIGN_DIRECT_FROM_NATIVE_DIALOG

signdirect.Enabled

Boolean

false

Diese Property setzt ob die Signatur direkt nach der Bestätigung durch den nativen Dialog im Signaturfeld ohne weitere Bestätigung erfasst werden soll.

(Default): False, d.h. nach der Signaturefassung im nativen Dialog muss diese wieder im Signaturefeld bestätigt werden.



2.4. Konfigurationsdatei (INI-Datei)

Die bisher in CIB jview&sign verwendete Konfigurationsdatei cibpad.ini wird nicht mehr benötigt. Die in dieser Datei enthaltenen Schlüssel, die für die Kommunikation mit der SignPad-Hardware wichtig sind, wurden durch entsprechende Properties ersetzt (siehe oben).

Folgende Schlüssel aus der INI-Datei wurden durch Properties ersetzt:

[License Information]

JCibView.Sign.SIGNATURECERTIFICATE= <MyCompanyCert>.p12

JCibView.Sign.SIGNATUREPRIVATEPASSWORD=<MyPrivatePassword>

JCibView.Sign.HARDWARELICENCE=<MyHardwareLicense>

JCibView.Sign.SIGNAPILICENCE=<MySignApiLicense>

JCibView.Sign.PROVIDER=signotec-signpad

 

Die untenstehenden Signatur-Information aus der INI-Datei können nun über den SignFieldCallback-Listener beim Laden des Dokuments dynamisch gesetzt werden:

[Signature Information]

JCibView.Sign.Info-Name.0=Herr X

JCibView.Sign.Info-Reason.0=Empfangsbestätigung Unterlagen nach § 7 VVG

JCibView.Sign.Info-Name.1=Herr X

JCibView.Sign.Info-Reason.1=Antragsteller (Versicherungsnehmer)

JCibView.Sign.Info-Name.2=Gertrud Faulhaber Und Ewering

JCibView.Sign.Info-Reason.2=Statuserklärung des Vermittlers


3. Schneller Einstieg: Einbindung des CIB jview&sign in Java

In den unteren Abschnitten finden Sie Code-Beispiele für den Aufruf von CIB Jview, verbunden mit der Versorgung durch Properties für Jview&form&sign. Vergewissern Sie sich, dass die CIB office module sich im Library Path der Java Virtual Machine (JVM) und die benötigten JAR-Dateien in einem Classpath-Verzeichnis befinden.


3.1. Einbindung von Jview&form&sign in eine Java Swing-Applikation

Integration in Java-Applikation (JFrame) und Anzeige einer PDF-Datei

 

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.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
 
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.sign.SignFieldCallback;
import de.cib.view.modules.sign.SignFieldInfo;
 
public class JCibViewFormSignRunner {
 
      public static final String TEST_FILENAME = "test_sign.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 SignFieldCallbackTester
          viewer.setSignFieldCallback(new SignFieldCallbackTester());
      }
 
 
      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 SignFieldCallbackTester
                  viewer.setSignFieldCallback(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.trace("Current lib directory: "                               + currentDir, JCibTrace.LEVEL_INFO, true);
                        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: String
             *  Default: ""
             */
      viewer.setProperty(ICibApplication.             PROPERTY_SIGN_PAD_SIGNATURECERTIFICATE,                   "MyCompanyCert.p12");
           
            /*
             *  Type: String
             *  Default: ""
             */
      viewer.setProperty(ICibApplication.
            PROPERTY_SIGN_PAD_SIGNATUREPRIVATEPASSWORD,                   "MyPrivatePassword");
           
            /*
             *  Type: String
             *  Default: ""
             */
      viewer.setProperty(ICibApplication.
            PROPERTY_SIGN_PAD_HARDWARELICENCE,                   "MyHardwareLicense");
           
            /*
             *  Type: String
             *  Default: ""
             */
      viewer.setProperty(ICibApplication.               PROPERTY_SIGN_PAD_SIGNAPILICENCE,                   "MySignApiLicense");
           
            /*              * 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);
           
            /*              * Type: String              * Values: 1 = linksbündig, 2 = zentriert, 3 = rechtsbündig
             * Default: 2 = zentriert
             */
      viewer.setProperty(ICibApplication.             PROPERTY_SIGN_SIGNATURE_ALIGNMENT, 2);
           
            // 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]);
                  }
            }
      }
}


3.2. Dynamische Anbindung an die Signaturkomponente Jview&sign

In CIB Jview sind auch Funktionen zur Anbindung an die  Formularkomponente Jview&sign integriert.

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

Interface SignFieldInfo zum Austausch von Informationen über ein Signaturfeld
Interface SignFieldCallback mit Callback-Methoden zur Information über die Anzahl und den Status der Signaturfelder sowie ihre Aktualisierung
Interface CustomCloseDialogInfo zum Austausch von Informationen für den CustomCloseDialogCallback

Interface SignFieldInfo zum Austausch von Informationen über ein Signaturfeld

Die Datenstruktur SignFieldInfo dient zum Austausch von Informationen über ein Signaturfeld, sie ist im CIB jview (package de.cib.view.modules.sign) definiert.

Interface SignFieldInfo (extends FieldInfo):

package de.cib.view.modules.sign;

 import de.cib.view.modules.FieldInfo;

 /**

 * Interface representing the sign field info for information exchange.

 *

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

 * interface SignFieldCallback.

 * @see FieldInfo

 * @see SignFieldCallback

 */

public interface SignFieldInfo extends FieldInfo {

 

      public String getReason();

 

      public void setReason(String reason);

     

      public String getSignerName();

 

      public void setSignerName(String signerName);


      public String getLocation();

      public void setLocation(String location);

      public boolean isSigned();


      public String getTimeStamp();

}

 

Interface FieldInfo:

package de.cib.view.modules;

 

/**

 * Interface representing the field info.

 *

 * It allows information exchange about a field.

 */

public interface FieldInfo {

 

// 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 SignFieldCallback mit Callback-Methoden zur Information über die Anzahl und den Status der Signaturfelder sowie ihre Aktualisierung

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 SignFieldCallback 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 SignFieldCallback ist im CIB jview (package de.cib.view.modules.sign) definiert und umfasst folgende Methoden.

Interface SignFieldCallback:

 

package de.cib.view.modules.sign;

 

import java.util.List;

 

/**

 * Interface SignFieldCallback

 *

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

 */

public interface SignFieldCallback {

 

      /**

       * Notifies about the current number of sign fields

       *

       * @param countSignFields    Number of sign fields

       * @param fileName           Name of loaded file

       * @param eventType          SignFieldCallback.ON_LOAD |
                  SignFieldCallback.ON_SAVE | SignFieldCallback.ON_EXIT

       */

      public void numberOfSignFields(int countSignFields,
            String fileName, int eventType);

     

      /**

       * Provides the list of SignFieldInfo for all sign fields.

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

       *

       * @param signFieldInfoList  List of SignFieldInfo elements

       * @param fileName           Name of loaded file

       * @param eventType          SignFieldCallback.ON_LOAD |
                  SignFieldCallback.ON_SAVE | SignFieldCallback.ON_EXIT

       * @return true if successful otherwise false

       */

      public boolean updateSignFieldInformation(List<SignFieldInfo>
            signFieldInfoList, String fileName, int eventType);

     

      /**

       * Gets ordered sign field list from input sign field list

       *

       * @param inputSignFields    List of input sign field names

       * @param orderedSignFields  List of ordered sign field names

       * @param int eventType      SignFieldCallback.ON_LOAD (only)

       * @return true if successful otherwise false

       */

      public boolean getOrderedSignFields(List<String> inputSignFields,
            List<String> orderedSignFields, int eventType);

}


Hinweise:
Die Callback-Methode getOrderedSignFields wird nur beim Laden eines Dokuments aufgerufen (Event type SignFieldCallback.ON_LOAD), und zwar nach dem Aufruf der bisherigen Callback-Methoden numberOfSignFields und updateSignFieldInformation.
Falls die Property ICibApplication.PROPERTY_SIGN_REQUIRED_FIRST = "signRequiredFirst.Enabled" gesetzt ist, wird die Callback-Methode getOrderedSignFields nicht aufgerufen, in diesem Fall werden zuerst die erforderlichen und danach die optionalen Signaturfelder durchlaufen.
Beim Speichern eines Dokuments (Event type SignFieldCallback.ON_SAVE) und beim Beenden des Jview (Event type SignFieldCallback.ON_EXIT) werden nur die Callback-Methoden numberOfSignFields und updateSignFieldInformation aufgerufen.

Beim Aufruf der Callback-Methode getOrderedSignFields werden diese Parameter übergeben:

  • List<String> inputSignFields: Liste der Namen der Signaturfelder
  • List<String> orderedSignFields: Leere Liste, die in der Callback-Methode mit der sortierten Liste der Signaturfeld-Namen gefüllt werden kann, falls eine andere Sortierung gewünscht ist.
  • int eventType: Event type SignFieldCallback.ON_LOAD


Behandlung nach Aufruf der Callback-Methode getOrderedSignFields:

-          Falls die Liste orderedSignFields unverändert leer zurückgeliefert wird, bleibt die Reihenfolge der Signaturfelder unverändert.

-          Falls eine nichtleere Liste orderedSignFields zurückgeliefert wird, werden die Signaturfelder in der in orderedSignFields angegebenen Reihenfolge durchlaufen.

-          Falls die Liste  der geordneten Signaturfelder weniger Elemente als die Liste der übergebenen Signaturfelder enthält, werden nur die Signaturfelder aus der Liste orderedSignFields in der angegebenen Reihenfolge durchlaufen. Signaturfelder, die nicht in der Liste der geordneten Signaturfelder enthalten, werden in der Ausfüllreihenfolge nicht berücksichtigt. Es erfolgt eine Trace-Ausgabe, dass die Liste orderedSignFields weniger Elemente als die Liste inputSignFields enthält.

-          Falls die Liste der geordneten Signaturfelder mehr Elemente als die Liste der übergebenen Signaturfelder enthält, werden nur die Signaturfelder aus der Liste orderedSignFields in der angegebenen Reihenfolge durchlaufen, die auch in der Liste inputSignFields enthalten sind. Es erfolgt eine Trace-Ausgabe, dass die Liste orderedSignFields mehr Elemente als die Liste inputSignFields enthält.

-          Die Prüfung der Signaturfeldnamen wird case-sensitiv durchgeführt, d.h. gleiche Feldnamen mit vom Original abweichender Groß-/Kleinschreibung werden als ungültige Feldnamen betrachtet.

-          Falls die Liste orderedSignFields ungültige Einträge enthält, also Einträge die nicht in der Liste der übergebenen Signaturfelder enthalten sind, werden die falschen Einträge nicht in die Liste der auszufüllenden Signaturfelder übernommen und eine entsprechende Trace-Ausgabe erfolgt.

-          Falls die Liste orderedSignFields doppelte Einträge enthält, werden die doppelten Einträge nicht in die Liste der auszufüllenden Signaturfelder übernommen und eine entsprechende Trace-Ausgabe erfolgt.

-          Tritt beim Aufruf des SignField-Callbacks getOrderedSignFields oder bei der Nachbearbeitung eine Exception auf, wird diese abgefangen, eine Trace-Ausgabe gemacht und eine entsprechende Fehlermeldung angezeigt.

 

Code-Beispiel zum Setzen eines SignFieldCallback Listeners bei der Jview-Instanz:

      // Definition eines SignFieldCallback Listeners

      static class SignFieldCallbackTester implements SignFieldCallback {

           

            public void numberOfSignFields(int countSignFields,
                  String fileName, int eventType) {

                  JCibTrace.info("SignFieldCallback - numberOfSignFields = "
                        + countSignFields
                        + ", fileName = " + fileName
                        + ", eventType = " + eventType);

            }

 

            public boolean updateSignFieldInformation(List<SignFieldInfo>
                  signFieldInfoList, String fileName, int eventType) {


                  JCibTrace.info("SignFieldCallback -
                        updateSignFieldInformation: fileName = " + fileName
                              + ", eventType = " + eventType);

 

                  // Example how to read and update sign field information

                  if (signFieldInfoList == null)

                        return false;

                  if (eventType == SignFieldCallback.ON_LOAD) {

                        int i = 0;

                        for (SignFieldInfo info : signFieldInfoList) {

                              i++;

                              info.setSignerName("Signer_" + i);

                              info.setReason("SignReason_" + i);

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

                              // Method setMandatory not yet available!

//                            info.setMandatory(i % 2 == 0);

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

                              JCibTrace.info(
                                   "Update sign field " + info.getName()
                                   + ", SignerName = " + info.getSignerName()
                                   + ", Reason = " + info.getReason()
                                   + ", Location = " + info.get Location()
                                    + ", isSigned = " + info.isSigned()
                                   + ", TimeStamp = " + info.getTimeStamp()
                                   + ", isMandatory = " + info.isMandatory()
                                   + ", Tooltip = " + info.getTooltip());

                        }

                  }

                  else if (eventType == SignFieldCallback.ON_SAVE) {

                        for (SignFieldInfo info : signFieldInfoList) {

                              JCibTrace.info(
                                   "Read sign field " + info.getName()
                                   + ", SignerName = " + info.getSignerName()
                                   + ", Reason = " + info.getReason()
                                   + ", Location = " + info.getLocation()
                                   + ", isSigned = " + info.isSigned()
                                   + ", TimeStamp = " + info.getTimeStamp()
                                   + ", isMandatory = " + info.isMandatory()
                                   + ", Tooltip = " + info.getTooltip());

                        }

                  }

                  else if (eventType == SignFieldCallback.ON_EXIT) {

                        for (SignFieldInfo info : signFieldInfoList) {

                              JCibTrace.info(
                                   "Read sign field " + info.getName()
                                   + ", SignerName = " + info.getSignerName()
                                   + ", Reason = " + info.getReason()
                                    + ", Location = " + info.getLocation()
                                   + ", isSigned = " + info.isSigned()
                                   + ", TimeStamp = " + info.getTimeStamp()
                                   + ", isMandatory = " + info.isMandatory()
                                   + ", Tooltip = " + info.getTooltip());

                        }

                  }

                  return true;

            }

 

            public boolean getOrderedSignFields(
                        List<String>inputSignFields,
                        List<String> orderedSignFields,
                        int eventType) {

                  if (eventType != SignFieldCallback.ON_LOAD) {

                        JCibTrace.debug("SignFieldCallback
                              .getOrderedSignFields - Only eventType                                       SignFieldCallback.ON_LOAD allowed.");

                        return false;

                  }

                  if (inputSignFields == null) {

                        JCibTrace.debug("SignFieldCallback
                              .getOrderedSignFields - No input sign field
                              list given");

                        return false;

                  }

                  if (orderedSignFields == null) {

                        JCibTrace.debug("SignFieldCallback
                              .getOrderedSignFields - No ordered sign field
                              list given");

                        return false;

                  }

                  // Clear ordered sign field list

                  orderedSignFields.clear();

                 

                  // Fill ordered sign field list with all input sign fields

                  orderedSignFields.addAll(inputSignFields);

                 

                  // Order output sign list e.g. by alphabetical string order                  Collections.sort(orderedSignFields);

                 

                  JCibTrace.debug("SignFieldCallback.getOrderedSignFields -
                        Event type = " + eventType

                        + "\nInput sign fields:" + inputSignFields

                        + "\nOrdered sign fields:" + orderedSignFields);

                 

                  return true;

            }

      }

      // Beim Start von Jview

            // Register SignFieldCallback Listener

            viewer.setSignFieldCallback(new SignFieldCallbackTester());

      ...

 

      // Beim Beenden von Jview

            // do post processing here

            viewer.stop();

            // Unregister SignFieldCallback Listener

            viewer.setSignFieldCallback(null);

      ...

Interface CustomCloseDialogInfo zum Austausch von Informationen für den CustomCloseDialogCallback

Die Datenstruktur CustomCloseDialogInfo dient zum Austausch von Informationen für den CustomCloseDialogCallback, sie ist im CIB jview (package de.cib.view.modules) definiert.

 

Interface CustomCloseDialogInfo:

package de.cib.view.modules;

 

/**

 * Interface describing the data structure for custom close dialog

 * with information to form and sign fields.

 *

 */

public interface CustomCloseDialogInfo {

 

      /**

       * Returns whether the form is changed or not

       * @return boolean flag

       */

      boolean isFormChanged();

     

      /**

       * Gets the unsigned mandatory field count

       * @return number of unsigned mandatory fields

       */

      int getUnsignedMandatorySignatureCount();

     

      /**

       * Gets the unsigned optional field count

       * @return number of unsigned optional fields

       */

      int getUnsignedOptionalSignatureCount();

}

 

Das Interface CustomCloseDialogCallback ist im CIB jview (package de.cib.view.modules) definiert und umfasst folgende Methoden.

Interface CustomCloseDialogCallback:

package de.cib.view.modules;

 

/**

 * Interface defining the callback for custom close dialog

 *

 */

public interface CustomCloseDialogCallback {

           

      /**

       * Method showCustomCloseDialog

       * @param customCloseDialogInfo interface to read form&sign data

       * @return returnCode of CustomCloseDialog

       *  0 - Yes

       *  1 - No

       *  2 - Cancel

       */

      public int showCustomCloseDialog(

CustomCloseDialogInfo customCloseDialogInfo);

 

}

 

Der Aufrufer muss sich dazu bei der Jview-Instanz als Listener anmelden, dazu ein Code-Beispiel:

// register CustomCloseDialogCallback

viewer.setCustomCloseDialogCallback(new CustomCloseDialogCallback() {

      @Override

      public int showCustomCloseDialog(

CustomCloseDialogInfo customCloseDialog) {

            int unsignedMandatoryCount = customCloseDialog

                  .getUnsignedMandatorySignatureCount();

            int unsignedOptionalCount = customCloseDialog

       .getUnsignedOptionalSignatureCount();

            int unsignedSignatureCount = unsignedMandatoryCount

                  + unsignedOptionalCount;

            String message = "";

            if (customCloseDialog.isFormChanged())

                  message = "Das Dokument enthält Änderungen an Formularfeldern, die noch nicht gespeichert wurden.";

 

            if (unsignedSignatureCount > 0) {

                  if (!message.isEmpty())

                        message += "\n";

                  message += "Das Dokument enthält noch %1 zu signierende(s) Feld(er), %2 Pflicht- und %3 optionale Feld(er).";

                  message = message.replaceFirst("%1",
                        String.valueOf(unsignedSignatureCount));

                  message = message.replaceFirst("%2",
                        String.valueOf(unsignedMandatoryCount));

                  message = message.replaceFirst("%3",
                        String.valueOf(unsignedOptionalCount));

            }

            if (message.isEmpty())

                  return JCibOptionPane.YES_OPTION;

 

            message += "\nMöchten Sie die Bearbeitung trotzdem beenden?";

            return JCibOptionPane.showYesNoDialog(
                  viewer, message, "Rückfrage"));

      }

});

 

 

Methode zur Abfrage des Rückgabewerts beim Beenden-Dialog:

In der Viewer-Instanz (Klasse JCibView) ist die Methode getCloseAction() verfügbar, die den Rückgabewert des Beenden-Dialogs liefert.


int closeDialogButton = viewer.getCloseAction();

Mögliche Werte (siehe auch CustomCloseDialogCallback):

 0 – Ja
 1 – Nein
 2 – Abbrechen
-1 – Vorbelegung (Dialog wurde nicht geöffnet)

Code-Beispiel für die Abfrage des gedrückten Buttons nach dem Beenden im Exit-Hook:

 

viewer.setExitHook(new Runnable() {

      public void run() {

            // do post processing here

            viewer.stop();

            // unregister FormFieldCallback Listener

            viewer.setFormFieldCallback(null);

            // Unregister SignFieldCallback Listener

            viewer.setSignFieldCallback(null);

 

            int closeDialogButton = viewer.getCloseAction();

            System.out.println("The following button was pressed in the close dialog: " + closeDialogButton);

      }

});