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

Minimale technische Voraussetzungen

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

Bild Glühbirne: Anleitung - Tutorial

In diesem Beispiel wird vermittelt, wie den genutzten Webservices von webPDF Optionen übergeben werden können. Außerdem wird neben dem bekannten Converter-Webservice ein zweiter webPDF-Webservice mit dem Namen Toolbox verwendet.

Dieses Beispiel baut auf dem Blog „How-to: Wie kann man die Webservices von webPDF 7 verwenden" auf. Falls Sie diesen noch nicht kennen, empfehlen wir, zunächst damit 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 Beispieltext 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 sonst im gleichen Paket in Konflikt stehen würden.

Das Projekt ist angelegt und die Proxy-Klassen sind generiert.

Umsetzung der Webservice-Anfragen an „Converter" und „Toolbox"

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

Screenshot Code-Start

Beginnen Sie nun mit dem Anlegen des Methodeninhaltes:

URL converterUrl;
URL toolboxUrl;

try {
// URL-Initialisierung
} catch (MalformedURLException ex) {
// Fehlerbehandlung
}

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);

// PDF/A-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 {
// Converter-Webservice aufrufen
} catch (de.webpdf.schema.converter.WebserviceException | IOException ex) {
// Fehlerbehandlung
}

Zu diesem Code muss nicht viel gesagt werden, da er weitgehend mit dem Beispiel aus dem letzten Blog übereinstimmt. Geändert wurden die zu konvertierende Datei sowie die zusätzlichen Optionen in der Operation-Instanz.

Das Hinzufügen eines PdfaType-Objektes zur Operation

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

führt dazu, dass das Dokument bereits während der Konvertierung in 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 Programmierung -> Webservice Parameter. Zusätzlich wurde eine weitere URL angelegt, die nachfolgend zum Generieren des Toolbox-Endpunkts genutzt wird.

Bemerkung:

Es gibt auch einen eigenen PDF/A-Webservice für webPDF. Der Converter-Webservice nimmt jedoch keinen Umweg über diesen, sondern stößt die PDF/A-Konvertierung direkt innerhalb von webPDF an.

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();

// Rotationseinstellungen für Toolbox-Operation
RotateType rotateType = new RotateType();
rotateType.setDegrees(180);

// Weitere Type-Elemente könnten ebenfalls ergänzt werden
toolboxOperation.getAnnotationOrAttachmentOrDelete().add(rotateType);

try {
// Toolbox-Webservice aufrufen
} catch (de.webpdf.schema.toolbox.WebserviceException | IOException ex) {
// Fehlerbehandlung
}

Mit der bereits erzeugten URL wird der Service (hier ToolboxService) initialisiert. Über den Service kann der Endpoint mit einer Getter-Methode abgefragt werden (getToolboxPort()). Der Endpoint ist - wie beim Converter-Webservice - die finale Kommunikationsschnittstelle.

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. Dort können alle in der Dokumentation beschriebenen Toolbox-Typen eingefügt werden (AnnotationType, AttachmentType, usw.).

In diesem Beispiel wird ein RotateType verwendet und mit einem Rotationswinkel von 180° gesetzt. Es könnten auch mehrere andere Type-Elemente hinzugefügt werden.

Die Ausführung ähnelt wieder stark der des Converter-Services, mit dem Unterschied, dass der execute-Methode hier eine URL anstatt eines DataHandlers übergeben wird.

Nach der Ausführung der Datei sollten zwei PDF-Dateien in Ihrem Projektordner liegen:

  1. Das Ergebnis der Konvertierung
  2. Das Ergebnis der Bearbeitung mit dem Toolbox-Webservice

Sie haben durch die Nutzung der Webservice-Optionen eine Java-Datei mit dem Converter-Webservice in ein 150 mm breites PDF-Dokument (im PDF/A-Standard) 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.