CIB jView sign technischer Leitfaden
Site: | CIB eLearning |
Course: | CIB jView sign |
Book: | CIB jView sign technischer Leitfaden |
Printed by: | Guest user |
Date: | Wednesday, 15 January 2025, 10:24 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 |
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 SignaturfeldInterface 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);
}
});