PDF-Konverter in Power Automate

Einleitung

Kann ich mittels Microsoft Power Automate und einer SPFx-Anwendung ohne größere Probleme einen PDF-Konverter erstellen? Die einfache Antwort: Ja. Und auch die Ausführliche gibt’s hier. (In dem Beitrag wurde die englische Version von Power Automate benutzt. Unter 0 Die Antwoord auf Seite 13 finden Sie jedoch Hilfe bezüglich der Umsetzung des Flows in Deutsch.)

Simpler Request

Wir starten mit dem Erstellen und Testen eines Endpunktes in Microsoft Power Automate.
Im folgenden Beispiel wird eine JSON an Power Automate übermittelt. In der JSON gibt es lediglich die Variable „message“, die vom Typ String ist. Als Ausgabe erhält man eine JSON mit der Variable „length“, welche die Anzahl der Charaktere in der „message“-Variablen wiedergibt.

Anleitung zum Aufbau eines Flows

  • Verwenden Sie als Trigger „When a HTTP request is received“ .
  • Benutzen Sie den Button „use sample payload“ und kopieren Sie in das Fenster folgende JSON:
{
 "message": "test"
}
  • Als nächsten Step fügen Sie die Action „Response“ hinzu. Im BODY muss folgende JSON eingefügt werden:
{
 "length":
}
  • Klicken Sie hinter den Doppelpunkt in der JSON auf „add Dynamic content“
  • Fügen Sie die Expression „length()“ hinzu. In die Klammern muss „message“ von dem http-Request.

Folgend ein Screenshot der Expression und wie der Flow nun aussehen sollte:

Abbildung 1: length Expression
Abbildung 2: Simple Request Aufbau
Abbildung 1: length ExpressionAbbildung 2: Simple Request Aufbau

Endpunkt testen

Zum Testen empfiehlt sich die Software Postman.

  • Kopieren Sie die „HTTP POST URL“ aus Power Automate und erstellen Sie einen neuen Request.
  • Fügen Sie die zuvor kopierte URL ein und schalten Sie die Methode auf POST um.
  • Wechseln Sie nun in die „Body“ Ansicht. Wchseln auf „raw“ und ändern das Format auf „JSON“. Benutzen Sie dabei folgende JSON im Body:
{
 "message": "Hallo Welt!"
}
  • Klicken Sie nun auf den Button „Send“. Es sollte eine Antwort erscheinen:
Abbildung 3: Postman Einstellungen
Abbildung 3: Postman Einstellungen

PDF-Konverter

Im Folgenden wird der Aufbau des PDF-Konverter erläutert.

Request

Wie im Endpunkt-Beispiel, wird die POST-Methode verwendet. Diesmal werden jedoch zwei Variablen empfangen:

  • Filename: hier wird ein random String benötigt, da Power Automate so etwas nicht gut erzeugen kann
  • Base64content: hier wird der Dateiinhalt als base64-String hinterlegt.

Folgend die JSON:

{
 "filename": "random guid",
 "base64content": "ein sehr langer string…."
}

So sieht der Request schließlich aus:

Abbildung 4: Request Action
Abbildung 4: Request Action

OneDrive

Im nächsten Schritt wird die Datei in OneDrive angelegt. Folgend wird diese dann konvertiert, der Binary dieser Konvertierung bleibt aber flüchtig und wird nicht als Datei gespeichert. Und zu guter Letzt wird auch die .docx-Datei wieder gelöscht, dadurch wird verhindert, dass mit diesem Prozess OneDrive mit Dateien überflutet wird.

Bei der Action „Create file“ muss darauf geachtet werden, dass der base64-String wieder in Binary umgewandelt wird. Dazu wird die Expression „base64tobinary“ verwendet:

base64ToBinary(triggerBody()?['base64content'])

Bei der „Convert file“- und „Delete file“-Action wird die „Id“ der „Create file“-Action verwendet.

Verwendet wurde dabei im Übrigen die Action „OneDrive for Business“.
So läuft der Prozess ab:

Abbildung 5: OneDrive Actions
Abbildung 6: OneDrive for Business
Abbildung 5: OneDrive ActionsAbbildung 6: OneDrive for Business

Response

Zuletzt gehen die Daten als JSON zurück:

{
  "status": "success",
  "base64Content": @{base64(body('Convert_file'))}
}
Abbildung 7: Response
Abbildung 7: Response

Übersicht

Folgend der ganze Flow zur Übersicht:

Abbildung 8: PDF-Konverter Übersicht
Abbildung 8: PDF-Konverter Übersicht

Power Automate Bugs

Noch einen Hinweis zu aktuellen Bugs mit base64 und Power Automate:
Wenn Sie den Workflow verlassen und diesen danach wieder öffnen, werden beide base64-Konverter einfach gelöscht. Diese müssen erst wieder erstellt werden, bevor erneut gespeichert werden kann:

Abbildung 9: Falsch 1
Abbildung 10: Falsch 2
Abbildung 9: Falsch 1Abbildung 10: Falsch 2

Zeiten

Es wurden zwei Tests jeweils zehn Mal durchgeführt und folgend dokumentiert:

Test 1

Datei: diese Datei ca. 2,2MB (Base64String: ca. 3MB), 14 Seiten, ca. 14 Abbildungen klein bis mittel groß.
Flow Ausführung: 4s-10s
Chrome Netzwerk Typ Fetch Größe 1,4MB: 10s-15s
Ergebnis PDF: ca. 1,1MB (base64String ca. 1,4MB)

Test 2

Datei: Prozessorientierter Projektbericht (IHK Abschlussprüfung FIAE) ca. 8,5MB (Base64String: ca. 11,7MB), 100Seiten 28 Abbildungen teils A4 groß.
Flow Ausführung: 14s-24s
Chrome Netzwerk Typ Fetch, Größe: 5,4MB: 44s-50s
Ergebnis PDF: ca. 4,4MB (Base64String ca. 6,2MB)

Limits

Will man den Flow produktiv nutzen, so sollten immer die natürlichen Limits von Power Automate berücksichtigt werden. Diese sind unter https://docs.microsoft.com/de-de/power-automate/limits-and-config zu finden. Die 100MB/Flow Grenze wird man wahrscheinlich nicht überschreiten. Pro Flow kommt eine base64 rein, wird in binary umgewandelt, darauf wird eine binary erzeugt und als base64String wieder rausgeschickt. Wenn man dazu sich Test2 anschaut werden dort ca. 30,8MB pro Flow verarbeitet. Weitere Limits sollte man je nach Kundenanforderungen beachten.

Weitere Formate

Der PDF-Konverter kann nicht nur „.docx“. Um herauszufinden welche Formate dieser noch kann, muss man sich lediglich die OneDrive REST API Dokumentation unter https://docs.microsoft.com/en-us/onedrive/developer/rest-api/api/driveitem_get_content_format?view=odsp-graph-online#format-options anschauen.

Beispiel React-App

Um den Flow auszuprobieren, hilft ein Postman nicht unbedingt. Daher wurde eine kleine Beispiel-App programmiert. Für diese wurde ein „create-react-app“-Project erstellt anstatt SPFx, dies macht einiges einfacher. Den Code sollte man recht schnell in eine SPFx-Anwendung implementieren können. Unter folgenden github könnt Sie das Projekt finden:

https://github.com/vreezy/pdf-converter

Folgende Schritte sind nötig:

  • Klonen:
git clone https://github.com/vreezy/pdf-converter.git
  • Installieren
npm install
  • Update der URL im service  „./src/service.tsx“
  • Starten:
npm start

Der Code selbst ist dokumentiert, ist aber auch kein Hexenwerk. Das Projekt wurde mit minimalem Aufwand umgesetzt.

Benutzung

Wählen Sie die entsprechend als PDF benötigte .docx Datei. Diese wird nun automatisch hochgeladen, konvertiert und nach einem kleinen Moment zum Download angeboten:

Abbildung 11: App-Oberfläche
Abbildung 11: App-Oberfläche

Die Antwoord

Wenn man nun kein Englisch-Fan ist, wird es etwas schwierig die richtigen Komponenten zu finden. Als Eselsbrücke hilft dem Autor der Bandname „Die Antwoord“. Immer, wenn der Autor einen Flow in Deutsch erstellt, kommt ihm nun dieser Name in den Sinn. Nachdem Sie sich vielleicht das ein oder andere Musikvideo angeschaut haben, werden Sie verstehen, warum man diesen Namen nicht mehr so einfach vergessen kann.

In der deutschen Version von Flow heißt „Response“ nämlich „Antwort“. Das klingt jetzt erst einmal logisch, dieser Artikel würde aber nicht existieren, wäre es für alle (einschließlich des Autors) immer so offensichtlich... 

Abbildung 12: Endpunkt in Deutsch
Abbildung 12: Endpunkt in Deutsch

Doch lieber Englisch?

Sollten sie die ganze Zeit auf Deutsch arbeiten, sich über oben genannte Probleme ärgern und es leid sein, immer Komma und Semikolon zu tauschen, dann werfen Sie doch mal einen Blick in die Power Automate-Einstellungen. Hier kann man auf die englische Version umstellen und sich viel Ärger ersparen.

Abbildung 13: Power Automate Einstellungen
Abbildung 13: Power Automate Einstellungen