How-to: Einsatz des OCR-Webservices von webPDF 7
Minimale technische Voraussetzungen
- Java version: 7
- webPDF version: 7
- wsclient version: 1

In diesem Beispiel wird die Nutzung des OCR-Webservices von webPDF vorgestellt. Die OCR-Funktionen in webPDF basieren auf Tesseract. Standardmäßig werden die Sprachen Deutsch, Englisch, Französisch, Spanisch und Italienisch unterstützt. Weitere Sprachen lassen sich im Tesseract-Ordner hinzufügen (Näheres dazu in der webPDF-Anleitung).
Nicht unterstützt werden aktuell Sprachen mit einem „Multibyte Character Set“, zum Beispiel Arabisch und verschiedene fernöstliche Sprachen. Die Anwendung des OCR-Webservices ist vor allem bei Dokumenten sinnvoll, die Text enthalten, dieser aber nicht als echter Text eingebettet ist. Für das Extrahieren von normal eingebettetem Text aus PDF-Dokumenten bietet webPDF eine Möglichkeit im Toolbox-Webservice.
Anlegen des Projektes und Generierung der nötigen Proxy-Klassen
Legen Sie wie in diesem vorhergehenden Beitrag ein Java-Projekt in IntelliJ mit den folgenden Optionen an:
- Template:
Command Line App - Project name:
OCRExample - Project location:
..\\OCRExample - Base package:
net.webpdf
Öffnen Sie in IntelliJ die Projektansicht. Öffnen Sie im src-Ordner - wie aus dem ersten Beitrag bekannt - die Eingabeaufforderung und generieren Sie mit dem folgenden Befehl die Proxy-Klassen:
wsimport -Xnocompile -s . http://localhost:8080/webPDF/soap/ocr?wsdl -extension
Legen Sie wie in den vorherigen Beispielen eine Main-Klasse mit einer main-Methode an.
Das Projekt ist angelegt und die Proxy-Klassen sind generiert.
Nutzung des Webservices „OCR"
Wie im Beispiel der vorherigen Blogs wird der gesamte Code wieder in die main-Methode der Main-Klasse eingefügt.

Vorher legen Sie noch einen Ordner mit der Bezeichnung content an, in dem Sie die im Anhang zu findenden Beispieldateien TIFFimgContent.tiff und webPDFContent.pdf einfügen.

Anlegen des neuen Ordners content.
Projekt mit dem befüllten Ordner content.
Beginnen Sie nun mit dem Anlegen des Programm-Codes in der main-Methode.
File pdfFile = new File("./content/webPDFContent.pdf");
File tiffFile = new File("./content/TIFFimgContent.tiff");
URL ocrUrl;
try {
// URL-Initialisierung
} catch (MalformedURLException ex) {
// Fehlerbehandlung
}
Am Anfang werden zwei File-Objekte erstellt, die auf die Dateien im content-Ordner des Projektes verweisen. Danach wird, wie aus den vorherigen Blogs bekannt, die URL für die Generierung der Service-Instanz erzeugt.
Operation ocrStrictTextOperation = new Operation();
ocrStrictTextOperation.setOcr(new OcrType());
ocrStrictTextOperation.getOcr().setLanguage(OcrLanguageType.DEU);
ocrStrictTextOperation.getOcr().setOutputFormat(OcrOutputType.TEXT);
Operation ocrTolerantTextOperation = new Operation();
ocrTolerantTextOperation.setOcr(new OcrType());
ocrTolerantTextOperation.getOcr().setLanguage(OcrLanguageType.DEU);
ocrTolerantTextOperation.getOcr().setOutputFormat(OcrOutputType.TEXT);
// Auch Dateien mit einer kleineren Auflösung als 200 dpi werden verarbeitet
ocrTolerantTextOperation.getOcr().setCheckResolution(false);
Operation ocrHocrOperation = new Operation();
ocrHocrOperation.setOcr(new OcrType());
ocrHocrOperation.getOcr().setLanguage(OcrLanguageType.DEU);
ocrHocrOperation.getOcr().setOutputFormat(OcrOutputType.HOCR);
Operation ocrPdfOperation = new Operation();
ocrPdfOperation.setOcr(new OcrType());
ocrPdfOperation.getOcr().setLanguage(OcrLanguageType.DEU);
ocrPdfOperation.getOcr().setOutputFormat(OcrOutputType.PDF);
ocrPdfOperation.getOcr().setCheckResolution(false);
Hier werden vier verschiedene Operation-Instanzen erzeugt. Die Nutzung der webservice-spezifischen Operationen wurde im letzten Blogbeitrag vorgestellt.
Alle Operation-Instanzen haben als Sprache Deutsch angegeben (OcrLanguageType.DEU). Zwei Instanzen nutzen als Ausgabeformat Text (OcrOutputType.TEXT), eine Instanz XHTML nach dem hOCR-Standard (OcrOutputType.HOCR) und eine Instanz PDF (OcrOutputType.PDF). Zwei Instanzen ignorieren die Prüfung auf eine Mindestauflösung von 200 dpi (setCheckResolution(false)), zwei führen sie aus (standardmäßig true).
Die Parameter finden Sie ebenfalls in der webPDF-Anleitung.
OCRService ocrService = new OCRService(ocrUrl);
OCR ocr = ocrService.getOCRPort();
StringBuilder pdfTextResult = new StringBuilder("Aus einem PDF extrahierter Text:\n");
StringBuilder imgTextResult = new StringBuilder("Aus einem tiff-Bild extrahierter Text:\n");
try {
// OCR-Aufrufe und Ergebnisverarbeitung
ocrHandler = ocr.execute(ocrTolerantTextOperation, null, tiffFile.toURI().toURL().toString());
textScanner = new Scanner(ocrHandler.getInputStream());
while (textScanner.hasNextLine()) {
// Text sammeln
}
ocrHandler = ocr.execute(ocrHocrOperation, new DataHandler(new FileDataSource(pdfFile)), null);
ocrHandler.writeTo(new FileOutputStream(new File("./hOCRResult.xhtml")));
ocrHandler = ocr.execute(ocrPdfOperation, null, tiffFile.toURI().toURL().toString());
ocrHandler.writeTo(new FileOutputStream(new File("./PDFResult.pdf")));
} catch (WebserviceException | IOException e) {
// Fehlerbehandlung
}
System.out.println(pdfTextResult.toString());
System.out.println("-----------------------------------------\n");
System.out.println(imgTextResult.toString());
In diesem Teil des Codes werden zunächst das Service-Objekt und das Port-/Endpoint-Objekt generiert. Danach werden vier Anfragen an den OCR-Webservice gesendet.
Der Rückgabewert wird jeweils temporär als DataHandler in die Variable ocrHandler geladen. Bei den ersten beiden Anfragen wird eine Textdatei im DataHandler zurückgeliefert. Der Inhalt wird mit einem Scanner ausgelesen und an den passenden StringBuilder angehängt. Die dritte Anfrage liefert eine XHTML-Datei im hOCR-Standard, die vierte eine PDF-Datei. Beide werden anschließend im Projektverzeichnis gespeichert.
Am Ende werden die aus der PDF- und TIFF-Datei extrahierten Texte ausgegeben.

Sie haben mit dem OCR-Webservice den Text (der nicht als normaler Text eingebunden war) aus einer PDF- und einer TIFF-Datei extrahiert, eine PDF-Datei aus der Textanalyse einer TIFF-Datei generiert und eine XHTML-Datei nach dem hOCR-Standard aus der Textanalyse einer PDF-Datei erzeugt.
Herzlichen Glückwunsch!
Anhang
Benötigte Importe für die Klasse:
import de.webpdf.schema._1_0.operation.OcrLanguageType;
import de.webpdf.schema._1_0.operation.OcrOutputType;
import de.webpdf.schema._1_0.operation.OcrType;
import de.webpdf.schema._1_0.operation.Operation;
import de.webpdf.schema._1_0.soap.ocr.OCR;
import de.webpdf.schema._1_0.soap.ocr.OCRService;
import de.webpdf.schema._1_0.soap.ocr.WebserviceException;
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;
import java.util.Scanner;