How-to: Wie man die Webservices von webPDF 7 mit Optionen verwenden kann

Minimum technical requirements

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

In diesem Beispiel wird vermittelt, wie den genutzten Webservices von webPDF Optionen übergeben werden können. Außerdem wird in diesem Beispiel, abgesehen von dem bekannten „Converter“-Webservice, noch ein zweiter webPDF Webservice mit dem Namen „Toolbox“ genutzt.  Dieses Beispiel setzt auf dem Blog [„How-to: Wie kann man die Webservices von webPDF 7 verwenden“] auf. Sollten Sie also dieses noch nicht kennen, wird empfohlen mit diesem zu beginnen. An den Softwareanforderungen ändert sich im Vergleich zum ersten Beispiel-Blog nichts.

Anlegen des Projektes und Generierung der nötigen Proxy Klassen

Legen Sie wie im ersten Beispiel-Text beschrieben ein Java Projekt in IntelliJ mit den folgenden Optionen an.

Template Command Line App
Project name OptionExample
Project Location …/OptionExample
Base package de.webpdf

Öffnen Sie in IntelliJ die Projektansicht. Öffnen Sie im „src“-Ordner die Eingabeaufforderung und generieren Sie mit den folgenden Befehlen die Proxy Klassen.

wsimport -Xnocompile -s . -p de.webpdf.schema.converter
http://localhost:8080/webPDF/soap/converter?wsdl   -extension
wsimport -Xnocompile -s . -p de.webpdf.schema.toolbox
http://localhost:8080/webPDF/soap/toolbox?wsdl   -extension

Bemerkung:

Mit dem „-p“ Argument wird das Zielpaket für die generierten Klassen festgelegt. Dies ist notwendig da die Klassen im gleichen Paket in Konflikt stehen würden.

Das Projekt ist angelegt und die Proxy Klassen generiert.

Umsetzung der Webservice-Anfragen an die webPDF Webservices „Converter“ und „Toolbox“

Wie im Beispiel des letzten Blogs wird der gesamte Code wieder in die „main“-Methode der „Main“-Klasse eingefügt.

Beginnen Sie nun mit dem Anlegen des Methoden-Inhaltes.

URL converterUrl;
URL toolboxUrl;

try {
    //URLs für converter und toolbox Service wsdl
    converterUrl = new URL("https://localhost:8080/webPDF/soap/converter?wsdl");
    toolboxUrl = new URL("https://localhost:8080/webPDF/soap/toolbox?wsdl");
} catch (MalformedURLException ex) {
    System.err.println(ex.getMessage());
    return;
}

ConverterService converterService=new ConverterService(converterUrl);
Converter converter=converterService.getConverterPort();

de.webpdf.schema.converter.Operation converterOperation=new de.webpdf.schema.converter.Operation();
converterOperation.setConverter(new ConverterType());

//Seiteneinstellungen für Konvertierung
converterOperation.getConverter().setPage(new PageType());
converterOperation.getConverter().getPage().setWidth(150);
//PDFA-Einstellungen für Konvertierung
converterOperation.getConverter().setPdfa(new PdfaType());
converterOperation.getConverter().getPdfa().setConvert(new PdfaType.Convert());
converterOperation.getConverter().getPdfa().getConvert().setLevel("3b");

DataHandler inputHandler=new DataHandler(
        new FileDataSource(
                new File("src/de/webpdf/schema/toolbox/Toolbox.java")));
DataHandler resultHandler;

try {
    resultHandler = converter.execute(converterOperation, inputHandler, null);
    try (FileOutputStream fos = new FileOutputStream(new File("./ConverterResult.pdf"))) {
        resultHandler.writeTo(fos);
    }
} catch (de.webpdf.schema.converter.WebserviceException | IOException ex) {
    System.err.println(ex.getMessage());
    return;
}

Zu diesem Code muss nicht viel gesagt werden, da er weitestgehend mit dem Beispiel aus dem letzten Blog übereinstimmt. Geändert wurden lediglich die zu konvertierende Datei und dass die Operation-Instanz mit mehr Optionen gefüllt wurde. Das Hinzufügen eins PdfaType-Objektes

zur Operation( converterOperation.getConverter().setPdfa(new PdfaType());)

führt dazu, dass bereits beim Konvertierungsvorgang das Dokument zu PDF/A umgewandelt wird. Über das Hinzufügen des PageType-Objektes werden die Seiteneinstellungen angepasst.

Alle benötigten Parameter finden Sie im webPDF-Benutzerhandbuch unter der Rubrik „Programmierung“->“Webservice Parameter“. Außerdem wurde eine zusätzliche URL angelegt die nachfolgend zum generieren des Toolbox Endpoints genutzt wird.

Bemerkung:
Es gibt auch einen PDF/A-Webservice für webPDF. Allerdings nimmt der „Converter“-Webservice nicht den Umweg über diesen, sondern die Konvertierung zum PDF/A-Format wird sofort innerhalb von webPDF angestoßen.

Ab dem folgenden Abschnitt im Code wird nun auch der Webservice „Toolbox“ genutzt.

resultHandler=null;

ToolboxService toolboxService=new ToolboxService(toolboxUrl);
Toolbox toolbox=toolboxService.getToolboxPort();

de.webpdf.schema.toolbox.Operation toolboxOperation=new de.webpdf.schema.toolbox.Operation();
//Rotations Einstellungen für Toolbox-Operation
RotateType rotateType=new RotateType();
rotateType.setDegrees(180);
//Auf diese Weise könnten noch diverse weitere Types zur Operation hinzuge-fügt werden
toolboxOperation.getAnnotationOrAttachmentOrDelete().add(rotateType);

try {
    resultHandler = toolbox.execute(toolboxOperation, null,
            new File("./ConverterResult.pdf").toURI().toURL().toString());
    try (FileOutputStream fos = new FileOutputStream(new Fi-le("./ToolboxResult.pdf"))) {
        resultHandler.writeTo(fos);
    }
} catch (de.webpdf.schema.toolbox.WebserviceException | IOException ex) {
    System.err.println(ex.getMessage());
}

Mit der bereits erzeugten URL wird der Service(hier der ToolboxService) initialisiert. Über den Service kann der Endpoint mit einer Getter-Methode abgefragt werden (hier „getToolboxPort()„). Der Endpoint ist genau  wie beim „Converter“-Webservice die finale Kommunikationsschnittstelle für  Sie. Der Datahandler resultHandler wird auf null gesetzt und neu initialisiert damit er nicht mehr auf das bereits erzeugte Ergebnis von Converter verweist. Die Operation für Toolbox hat als Basiselement eine Liste auf die Sie mit „toolboxOperation.getAnnotationOrAttachmentOrDelete()“ zugreifen können. Darin können Sie alle in der Dokumentation beschriebenen Toolbox-Types einfügen (AnnotationType,AttachmentType,…). Dies wird in diesem Beispiel mit einem RotateType durchgeführt. In diesem wird vor der Übergabe an die Operation noch ein Rotationswinkel von 180° gesetzt. Es hätten aber noch mehrere andere Type-Elemente zu der Liste hinzugefügt werden können(Die alle wieder diverse Anpassungsmöglichkeiten haben). Die Ausführung ähnelt wieder stark der des Converter Services  mit dem Unterschied, dass hier der „execute“-Methode eine URL anstatt eines Datahandlers übergeben wird.

Nach der Ausführung der Datei müssten 2 PDF-Dateien in Ihrem Projektordner liegen.

  1. Das Ergebnis der Konvertierung, 2. Das Ergebnis durch die Bearbeitung mit dem „Toolbox“-Webservice

Sie haben durch die Nutzung der Webservice-Optionen eine JAVA-Datei mit dem „Converter“-Webservice in ein 150mm breites PDF-Dokument (das dem PDF/A Standard entspricht) konvertiert und dieses anschließend mit dem „Toolbox“-Webservice um 180° gedreht. Herzlichen Glückwunsch!

Anhang:
Benötigte Importe für die Klasse:

import de.webpdf.schema.converter.Converter;
import de.webpdf.schema.converter.ConverterService;
import de.webpdf.schema.converter.ConverterType;
import de.webpdf.schema.converter.PageType;
import de.webpdf.schema.converter.PdfaType;
import de.webpdf.schema.toolbox.RotateType;
import de.webpdf.schema.toolbox.Toolbox;
import de.webpdf.schema.toolbox.ToolboxService;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

Weiter zu Teil 3 unserer Technik Reihe Webservices geht es hier..