How-to: Wie man webPDF mit Ruby über REST nutzen kann

In diesem Beispiel geht es darum, anhand eines einfachen Beispiels zu zeigen, wie man die Webservices von webPDF mit der Skriptsprache Ruby über die REST-Schnittstelle nutzen kann. Um dieses Beispiel auf Ihrem PC nachzuvollziehen benötigen Sie ein lokal installiertes webPDF, Ruby in der Version 2.x und einen beliebigen Texteditor. Eventuell benötigte Hilfe zur Installation von Ruby finden Sie unter ruby-lang.org/de/documentation/installation.

Einrichtung des Projektes

Prüfen Sie zunächst ob die Einrichtung von Ruby erfolgreich war indem Sie in der Eingabeaufforderung die Befehle

‚gem‘ und ‚ruby –v‘

nacheinander eingeben. Wenn beide Befehle bekannt sind war die Installation erfolgreich.

Danach installieren Sie mit der Eingabeaufforderung die benötigte ‚gem ‚rest-client“ mit dem Befehl ‚gem install ‚rest-client“. Gems sind Bibliotheken die mit der bei Ruby  standardmäßig vorhandenen Anwendung verwaltet werden können. Nun sind Sie bereit mit dem Schreiben des Beispielprogramms zu beginnen. Erstellen Sie im Verzeichnis Ihrer Wahl, mit dem Texteditor Ihrer Wahl eine Datei mit der Endung ‚.rb‘ für Ihren Code. Außerdem erzeugen Sie noch eine Datei mit dem Namen ‚test.txt‘ in die Sie beliebige Eingaben machen können. Diese wird von Ihrem Programm später zu einem PDF-Dokument konvertiert.

Schreiben des Codes

require 'rest-client'
require 'json'

Mit diesen Angaben binden Sie die benötigen gems in Ihr Skript ein. ‚json‘ dient zum parsen und generieren von JSON-Objekten und ist in der Ruby Standardbibliothek enthalten. ‚rest-client‘ ermöglicht einfaches Arbeiten über die REST-Schnittstelle und wurde zuvor von Ihnen mit dem ‚gem‘-Befehl installiert.

WEBPDF_URL='http://localhost:8080/webPDF'
url=WEBPDF_URL+'/rest/authentication/user/login'
resp=RestClient.get(url,
                    {params: {username: 'admin', password: 'admin'}})
token=JSON.parse(resp)['token']

Zunächst wird die Basis URL Ihrer webPDF Anwendung in einer Konstante gespeichert. Aus dieser und dem angehängten String wird die URL zum Authentication-Service von webPDF gebildet.

Dort wird mit den Parametern ‚username‘ und ‚password‘ ein Token für Ihre Sitzung erzeugt. Dieser wird aus dem zurückgelieferten JSON-Objekt in die Variable ‚token‘ extrahiert.

url=WEBPDF_URL+'/rest/documents'
file=File.new('test.txt', 'rb')
resp=RestClient.post url, {filedata: file}, {Token: token}
txt_document_id=JSON.parse(resp)['documentId']

Hier wird über den Documents-Service von webPDF die Datei ‚test.txt‘ auf den Server geladen. Der zuvor generierte Token wird mit dem Bezeichner ‚Token‘ in den Header gesetzt. Aus dem Response JSON-Object wird die Dokumenten ID extrahiert.

url=WEBPDF_URL+"/rest/converter/#{txt_document_id}/convert"
conversion_options={serviceOptions: '',
                    sourceExtension: '.txt',
                    targetExtension: '.pdf',
                    converterOptions: 'pdf.compression=true&pdf.jpegQuality=90'}
resp=RestClient.post url, JSON.generate(conversion_options), {content_type: :json,
                                                              accept: :json,
                                                              token: token}
pdf_document_id=JSON.parse(resp)['documentId']

In diesem Abschnitt wird die Textdatei in ein PDF-Dokument konvertiert. Die URL zum Converter-Service wird mit der Dokumenten ID der Textdatei gebildet und im Body des Posts befindet sich ein JSON-Objekt das die Konvertierungsoptionen enthält(Dieses wird zuvor aus einem Ruby Hash generiert). Einzelheiten zu den Parametern finden Sie in der webPDF Dokumentation. Eine Übersicht über die REST-Methoden können Sie sich unter localhost:8080/webPDF/help/restful/ machen. Aus der Antwort wird die Dokumenten ID der erzeugten PDF-Datei extrahiert.

url=WEBPDF_URL+"/rest/documents/#{pdf_document_id}"
resp=RestClient.get url, {token: token}
File.open('test_result.pdf', 'wb') do |file|
  file << resp
end

Mit der Dokumenten ID der PDF-Datei in der URL wird der Documents-Service angesprochen und die Datei abgefragt. Diese wird danach in die Datei ‚test_result.pdf‘ geschrieben.

Nun führen Sie das Programm aus, indem Sie mit der Eingabeaufforderung in den Projektordner navigieren und das Skript mit dem Befehl ‚ruby dateiName.rb‘ starten. Danach sollte eine PDF-Datei mit dem Namen ‚test_result.pdf‘ und dem Inhalt von der Datei ‚test.txt‘ in Ihrem Projektordner liegen.

Wie Sie sehen ist webPDF mit Ruby, wie auch mit den meisten anderen Skriptsprachen, sehr einfach über die REST-Schnittstelle zu Nutzen.

Anhang:

Der gesamte Quellcode:

require 'rest-client'
require 'json'

WEBPDF_URL='http://localhost:8080/webPDF'

url=WEBPDF_URL+'/rest/authentication/user/login'
resp=RestClient.get(url,
                    {params: {username: 'admin', password: 'admin'}})
token=JSON.parse(resp)['token']

url=WEBPDF_URL+'/rest/documents'
file=File.new('test.txt', 'rb')
resp=RestClient.post url, {filedata: file}, {token: token}
txt_document_id=JSON.parse(resp)['documentId']

url=WEBPDF_URL+"/rest/converter/#{txt_document_id}/convert"
conversion_options={serviceOptions: '',
                    sourceExtension: '.txt',
                    targetExtension: '.pdf',
                    converterOptions: 'pdf.compression=true&pdf.jpegQuality=90'}
resp=RestClient.post url, JSON.generate(conversion_options), {content_type: :json,
                                                              accept: :json,
                                                              token: token}
pdf_document_id=JSON.parse(resp)['documentId']

url=WEBPDF_URL+"/rest/documents/#{pdf_document_id}"
resp=RestClient.get url, {token: token}

File.open('test_result.pdf', 'wb') do |file|
  file << resp
end