webPDF Webservices Signature

Minimum technical requirements

  • Java version: 7
  • webPDF version: 7
  • wsclient version: 1

Signatur auf PDF-Dokumenten anbringen

Wenn Sie die Operation des webPDF Webservices Signature nutzen möchten, dann haben Sie die Möglichkeit, diese mittels der webPDF wsclient Bibliothek zu verwenden.

Wichtiger Hinweis:

Das nun folgende Coding-Beispiel beruht auf der Nutzung der webPDF wsclient Bibliothek. Um das Beispiel zu verstehen und anzuwenden, sollte zunächst folgender Blogbeitrag beachtet werden:

webPDF und Java: mit der „wsclient“ Bibliothek ganz einfach

Vorbereitungen für Webservice Signature

Zunächst sollten Sie bereits eine REST- oder SOAP-Session erzeugt haben und über den Aufruf der WebserviceFactory entweder ein SignatureWebService Objekt (für eine SOAP Session)

SignatureWebService signatureWebService = WebServiceFactory.createInstance(session, WebServiceType.SIGNATURE);

..oder ein SignatureRestWebService Objekt (für eine REST Session) erzeugen können:

SignatureRestWebService signatureWebService = WebServiceFactory.createInstance(session, WebServiceType.SIGNATURE);

Außerdem sollten Sie diesem WebService Objekt über Aufruf der Methode setDocument() entweder ein RestDocument oder ein SoapDocument Objekt übergeben haben.

Was ist der Signature Webservice?

Der Signature Webservice ist ein Endpunkt des webPDF Servers, der das Hinzufügen von Signaturen zu PDF-Dokumenten ermöglicht.

Die Signature Operation vom Typ SignatureType können Sie neu initialisieren und im Webservice setzen oder die automatisch generierte Instanz des Webservices nutzen.

SignatureType signatureType = signatureWebService.getOperation();

Für die ConverterType Instanz lassen sich folgende Parameter setzen:

Das Objekt „add“

In diesem Objekt werden alle Einstellungen das Hinzufügen einer Signatur gesetzt.

SignatureType.Add add = new SignatureType.Add();
signatureType.setAdd(add);

appendSignature (Standardwert: true)

Mit dem Parameter wird angegeben, ob eine vorhandene Unterschrift ersetzt werden soll.

add.setAppendSignature(true);

 certificationLevel (Standardwert: „noChanges“)

Mit dem Parameter wird angegeben, die Signaturstufe angegeben. Die möglichen Werte befinden sich im Enum CertificationLevelType und sind:

  • CertificationLevelType.NONE
    Unterschreiben, aber nicht zertifizieren, des Dokuments – d. h. weitere Unterschriften bzw. Änderungen sind möglich.
  • CertificationLevelType.NO_CHANGES
    Dokument zertifizieren, und keine weiteren Änderungen mehr zulassen.
  • CertificationLevelType.FORM_FILLING_AND_SIGNATURES
    Dokument zertifizieren, aber das Ausfüllen von Feldern erlauben.
  • CertificationLevelType.FORM_FILLING_AND_SIGNATURES_AND_ANNOTATIONS
    Dokument zertifizieren, aber das Ausfüllen von Feldern und das Anbringen von Anmerkungen erlauben.
add.setCertificationLevel(CertificationLevelType.FORM_FILLING_AND_SIGNATURES);

contact (Standardwert: „“)

Mit dem Parameter wird der Name des Unterzeichners angegeben.

add.setContact("John Doe");

fieldName (Standardwert: „Signature1“)

Mit dem Parameter der Name des Feldes, in dem die Signatur enthalten sein wird, angegeben.

add.setFieldName("SignatureField");

keyName (Standardwert: „“)

Definiert den Namen des Schlüssel (Alias), der bei der Unterzeichnung des Dokuments verwendet werden soll. Diese Einstellung überschreibt die Konfigurationseinstellung des Servers. Weitere Informationen finden Sie in der webPDF Doku im Kapitel „Keystore„.

add.setKeyName("keyAlias");

keyPassword (Standardwert: „“)

Definiert das Passwort, das für den Zugriff auf den privaten Schlüssel von „keyName“ benötigt wird. Diese Einstellung überschreibt die Konfigurationseinstellung des Servers. Weitere Informationen finden Sie in der webPDF Doku im Kapitel „Keystore„.

add.setKeyPassword("keyPassword");

reason (Standardwert: „“)

Mit diesem Parameter kann der Grund für das Hinzufügen der Signatur angegeben werden.

add.setReason("demonstration for wsclient blog article");

location (Standardwert: „“)

Mit diesem Parameter kann der Ort für das Hinzufügen der Signatur angegeben werden.

add.setLocation("Main Street 0, Anytown, USA");

Das Objekt „appearence“

In diesem Objekt können Eigenschaften zum visuellen Erscheinungsbild der Signatur festgelegt werden.

SignatureType.Add.Appearance appearance = new SignatureType.Add.Appearance();
add.setAppearance(appearance);

page (Standardwert: 1)

Mit diesem Parameter wird festgelegt auf welcher Seite die Signatur angezeigt wird.

appearance.setPage(1);

identifier (Standardwert: „“)

Text, der im rechten Textfeld der Signatur angezeigt werden soll. Wird kein Wert angegeben, dann stehen dort der Name des Unterschreibers und die Namensbestandteile des Zertifikats.

appearance.setIdentifier("right field of signature text");

name (Standardwert: „“)

Setzt den Text, der im linken Bereich der Signatur angezeigt werden soll. Wird kein Wert angegeben, dann steht dort der Name des Unterschreibers.

appearance.setName("left area of signature");

Das Objekt „identifierElements“

In diesem Objekt werden die Bestandteile der visuellen Signatur festgelegt.

SignatureIdentifierType identifier = new SignatureIdentifierType();
appearance.setIdentifierElements(identifier);

Mit den hier aufgeführten Optionen für das Objekt kann die Anzeige jeweils aktiviert oder deaktiviert werden. Der Standartwert ist jeweils true.

identifier.setShowCommonName(true);
identifier.setShowCountry(true);
identifier.setShowDate(true);
identifier.setShowLocal(true);
identifier.setShowMail(true);
identifier.setShowName(true);
identifier.setShowOrganisationUnit(true);
identifier.setShowSignedBy(true);
identifier.setShowState(true);

Das Objekt „image“

In diesem Objekt wird eine Grafik für die visuelle Signatur festgelegt, welche im Hintergrund der Signatur gezeichnet wird.

SignatureImageType image = new SignatureImageType();
appearance.setImage(image);

position (Standardwert: „center“)

Legt die Position der Grafik innerhalb des Signature-Feldes fest. Dies wird jeweils mit einem Eintrag des Enums SignatureImagePositionType getätigt.

  • SignatureImagePositionType.CENTER – zentrier
  • SignatureImagePositionType.LEFT – links
  • SignatureImagePositionType.RIGHT – rechts
image.setPosition(SignatureImagePositionType.CENTER);

opacity(Standardwert: 50)

Legt die Deckkraft für die Grafik prozentual fest.

image.setOpacity(60);

Das Objekt „data“

Mit diesem Objekt wird die eigentliche Grafik für das image-Objekt als Base64 übergeben.

SignatureFileDataType imageData = new SignatureFileDataType();
image.setData(imageData);
imageData.setValue(Base64.encodeBase64(FileUtils.readFileToByteArray(new File("image.png"))));

Das Objekt „position“

Mit diesem Objekt wird die Position der visuellen Signatur festgelegt.

SignaturePositionType position = new SignaturePositionType();
appearance.setPosition(position);

x(Standardwert: 10 (Millimeter vom linken Rand))

X-Position des Signaturfeldes.

position.setX(10F);

y(Standardwert: 10 (Millimeter vom unteren Rand))

Y-Position des Signaturfeldes.

position.setY(10F);

width(Standardwert: 80 (Millimeter))

Breite des Signaturfeldes.

position.setWidth(80F);

height(Standardwert: 40 (Millimeter))

Höhe des Signaturfeldes.

position.setHeight(60F);

coordinates (Standardwert: „user“)

Legt das Koordinatensystem und somit den Ursprung für die Angaben mit einem Eintrag des Enums CoordinatesType fest.

  • CoordinatesType.USER – User-Koordinatensystem (Ausgangspunkt links oben)
  • CoordinatesType.PDF – PDF-Koordinatensystem (Ausgangspunkt links unten)
position.setCoordinates(CoordinatesType.USER);

metrics (Standardwert: „mm“)

Legt die Maßeineit für die Angaben mit einem Eintrag des Enums MetricsType fest.

  • MetricsType.MM – Millimeter
  • MetricsType.PX – Pixel
position.setMetrics(MetricsType.MM);

Beispiel

Schließlich noch ein Beispiel für einen Webserviceaufruf (für die Ansprache der SOAP Schnittstelle):

try (
                // Aufbau einer Session mit dem webPDF Server(hier SOAP):
                SoapSession session = SessionFactory.createInstance(
                        WebServiceProtocol.SOAP,
                        new URL("https://localhost:8080/webPDF/"));

        ) {
            SignatureWebService signatureWebService = WebServiceFactory.createInstance(session, WebServiceType.SIGNATURE);

            SignatureType signatureType = signatureWebService.getOperation();

            SignatureType.Add add = new SignatureType.Add();
            signatureType.setAdd(add);

            add.setReason("webPDF wsclient sample");
            add.setLocation("Main Street, Anytown, USA");
            add.setContact("Any Company");
            add.setCertificationLevel(CertificationLevelType.NO_CHANGES);
            add.setKeyName("Generic self-signed certificate");

            SignatureType.Add.Appearance appearance = new SignatureType.Add.Appearance();
            add.setAppearance(appearance);

            SignaturePositionType position = new SignaturePositionType();
            position.setX(5.0f);
            position.setY(5.0f);
            position.setWidth(80.0f);
            position.setHeight(15.0f);

            appearance.setPosition(position);

            SignatureImageType image = new SignatureImageType();
            SignatureFileDataType imageData = new SignatureFileDataType();
            imageData.setValue(Files.readAllBytes(Paths.get("logo.png")));
            image.setData(imageData);
            image.setOpacity(40);
            appearance.setImage(image);

            appearance.setIdentifier("John Doe");

            try (
                    // Bereit stellen des Dokuments, das verarbeitet werden soll
                    // und der Datei, in die das Ergebnis geschrieben werden soll:
                    SoapDocument document = new SoapDocument(new File("source.pdf").toURI(), new File("result.pdf"))) {
                //Ausführung und schließen der Dokumente
                signatureWebService.setDocument(document);
                signatureWebService.process().close();

            }
        }

Mehr Infos:

Dokumente mit Digitalen Signaturen sichern – Teil 3

Weitere Coding-Beispiele für Webservices, welche Sie mit der ws-client Bibliothek nutzen können finden Sie hier.