PDF Signatur Informationen
Experimentelle API
Die hier beschriebene Funktionalität ist als experimentelle API deklariert. Damit gelten für diese Klasse die Bedingungen der Experimental jadice API , die in der Dokumentation der document platform dokumentiert sind.
Einleitung
Im rechtsverbindlichen Rahmen wurden bisher oft traditionelle Papierdokumente genutzt, da auf ihnen eine eigenhändige Unterschrift einer Person oder ein Stempel eines Unternehmens oder einer Behörde platziert werden kann. So wurde die Echtheit des Dokuments oder einer Willenserklärung bescheinigt.
Digitale Signaturen und Unterschriften stellen ein modernes Verfahren dar, um eine vergleichbare Rechtssicherheit für digitale Dokumente zu ermöglichen. Sie werden unter anderem in automatisierten Prozessen verwendet, bspw. der Massenversand von Rechnungen oder wenn im Prozess des Unterzeichens von Dokumenten auf eigenhändige Unterschriften verzichtet werden kann oder soll.
Grundsätzlich kann jedes elektronische Dokument digital unterschrieben werden. In der Praxis hat sich jedoch für den Austausch und für die Archivierung von elektronischen Dokumenten das PDF Format etabliert.
Die experimentelle jadice PDF Signature Store API soll Integratoren einen voll qualifizierten Zugriff auf die in einen PDF Dokument enthaltenen Signatur Informationen ermöglichen. Zusätzlich wird eine Möglichkeit angeboten, während der Anzeige eines Dokuments im Viewer enthaltene Signatur Details in einem RollOut einblenden zu lassen.
Zugriff über SignatureStores
Den Einstieg bieten die Klassen com.levigo.jadice.format.pdf.signaturestore.SignatureStores
bzw. com.levigo.jadice.format.pdf.signaturestore.SignatureStore
. Sie erlauben Zugriff auf die in einem PDF enthaltenen Signatur Informationen.
Die Klasse SignatureStores bietet über ihre statischen Methoden einen einfachen Zugriff auf den jeweiligen Store. Dieser beinhaltet alle in einem PDF Dokument enthaltenen Signatur Informationen. Das Codebeispiel zeigt den Aufruf.
Document doc = ... Page page = ... SignatureStore signatureStore1 = SignatureStores.getSignatureStore(doc); SignatureStore signatureStore2 = SignatureStores.getSignatureStore(page);
Stehen keine Signaturdaten zur Verfügung, wird obiger Code null
als Rückgabewert liefern. Stehen Signatur Informationen zur Verfügung, wird der entsprechende SignatureStore
zurück gegeben.
Der SignatureStore
erlaubt Zugriff auf alle Signatur Daten, die in dem Quell PDF vorhanden sind. Signaturdaten sind immer im Kontext eines PDF Dokuments zu verstehen. In diesem Sinne liefert SignatureStores.getSignatureStore(page)
den SignatureStore des zugrundeliegenden PDF Dokuments und ist identisch mit dem Ergebnis des Aufrufs SignatureStores.getSignatureStore(doc)
, sofern das übergebene Dokument das Quell PDF der Seite ist.
Der SignatureStore
Der SignatureStore
und die damit verbundenen Klassen sind strukturell ähnlich dem Aufbau der Daten in einem PDF Dokument. Damit soll Integratoren die Möglichkeit einer einfachen Orientierung bei der Verwendung der Daten angeboten werden. Der SignatureStore
ermöglicht den Zugriff auf den DocumentSecurityStore
des Dokuments und alle eingebetteten SignatureFields
.
Der DocumentSecurityStore
(DSS) enthält dokumentenübergreifende Informationen über die verwendeten Zertifikate, Zeitstempelsignaturen und Hilfszertifikate, die zur Validierung der an der Zertifikatskettenvalidierung beteiligten Zertifikate erforderlich sind. Darüber hinaus bietet er Zugang zu validierungsbezogenen Informationen für CMS-Signaturen.
Document doc = ... SignatureStore store = SignatureStores.getSignatureStore(doc); DocumentSecurityStore dss = store.getStoreDSS(); List<byte[]> certs = dss.getCerts(); List<byte[]> crLs = dss.getCRLs(); List<byte[]> ocsPs = dss.getOCSPs(); String digestOfSignatureField = ... ValidationInformation sigFieldVRI = dss.getVRI(digestOfSignatureField);
SignatureFields repräsentieren Formularfelder, die in einem PDF Dokument eingebettet sind und bieten Zugriff auf die zugehörigen digitalen Signaturdaten, abgebildet durch SignatureData
. SignatureData
entspricht dem Signature Dictionary in der PDF Definition und bietet detailierte Informationen zu der angewendeten Signatur. Dazu gehören Angaben zu dem Unterzeichner, den Grund der Signatur, Ort und Zeit der Signatur Aufbringung und welcher Filter und SubFilter die signierten Daten ausmachen.
Document doc = ... SignatureStore store = SignatureStores.getSignatureStore(doc); List<SignatureField> signatureFieldList = store.getSignatureFields(); SignatureField signatureField = signatureFieldList.get(0); SignatureData data = signatureField.getSignatureData(); String signerName = data.getName(); String reason = data.getReason(); List<SignatureReference> refList = data.getReferences(); ...
Weiterhin beinhaltet es eine Liste von SignatureReference
s. Eine SignatureReference
spezifiziert die Erkennung und den Umgang von Signaturänderungen. Insbesondere enthält sie eine TransformMethod
, die die allgemeine Methode zur Erkennung von Änderungen angibt, und die TransformParams
, die die variablen Teile der Transformationsmethode beschreiben.
Anzeige RolloutPDFSignatureBox
Einen leichtgewichtigen Hinweis auf vorhandene Signaturen bei der Anzeige eines Dokuments liefert dem Anwender die Klasse com.levigo.jadice.demo.pdf.signature.RolloutPDFSignatureBox
. Sie ist Teil der jadice Demo Klassen und steht Integratoren im Source Code zur Verfügung.
Die RolloutPDFSignatureBox ist eingbunden in der BasicDemoApplication
. Wird in der BasicDemoApplication
ein PDF Dokument mit Signatur Informationen angezeigt, zeigt sich eine kleine Box oberhalb der Anzeige mit wesentlichen Angaben der ersten im Dokument gefundenen Signatur.
Bei jedem Seitenwechsel versteckt oder zeigt sich das Rollout, je nachdem ob entsprechende Signatur Informationen vorliegen. Damit wird auch die Anzeige von Akten und zusammengesetzten Dokumenten von dem RollOut unterstützt. Das Signatur Datum, sofern vorhanden, wird in der PDF internen Schreibweise angezeigt.
Erweiterungsmöglichkeiten
Wenn es der Anwendungsfall erfordert, ist es möglich das RollOut anzupassen, um weitere Informationen anzuzeigen, oder ausklappbar zu gestalten, um die Signatur Informationen aller Signaturen anzuzeigen. In diesem Fall ist es dem Integrator freigestellt gewünschte Änderungen vorzunehmen. Als Demo Code stehen alle Klassen als Source Code zu weiteren Verwendung zur Verfügung.
Tool und Commands
Initial wird das RollOut über das com.levigo.jadice.demo.pdf.signature.PDFSignatureBoxTool
installiert. Die Steuerung des Signature RollOuts übernehmen die Commands com.levigo.jadice.demo.pdf.signature.commands.ToggleEnabledPDFSignatureBoxCommand
und com.levigo.jadice.demo.pdf.signature.commands.TogglePDFSignatureBoxCommand.
Das TogglePDFSignatureBoxCommand
zeigt bzw. versteckt das RollOut. Das ToggleEnabledPDFSignatureBoxCommand
aktiviert bzw. deaktiviert dauerhaft das Erscheinen des Rollouts. Im aktivierten Zustand zeigt sich die Box bei Seiten- bzw. Dokumentwechsel automatisch wieder, sofern Signatur Informationen vorhanden sind. Im deaktivierten Zustand bleibt die Box verborgen.
Die Commands befinden sich in der BasicDemoApplication
im Menü unter Einstellungen und im Kontext Menü. Für letzteres kann der com.levigo.jadice.demo.pdf.signature.PDFSignatureVisibilityMenuContributor von Integratoren in der eigenen Implemantation genutzt werden.