PDFEditor
Übersicht
Abschnitt betitelt „Übersicht“Die Aktion PdfEditor bearbeitet ein PDF in einem oder mehreren Schritten, den Operationen. Sie laufen in der angegebenen Reihenfolge, jede auf dem Ergebnis der vorigen:
| Operation | Was sie macht |
|---|---|
Merge |
Hängt die Seiten anderer PDFs hinten (oder vorne) an |
RemovePages |
Löscht Seiten |
Rotate |
Dreht Seiten um 90°, 180° oder 270° |
Reorder |
Bringt die Seiten in eine neue Reihenfolge |
ExtractPages |
Schreibt ausgewählte Seiten in ein neues PDF |
Split |
Schreibt das PDF als mehrere Dateien, alle n Seiten oder vor bestimmten Seiten |
ExtractText |
Liest den Text der Seiten für die folgenden Aktionen |
FillForm |
Füllt Formularfelder aus, auf Wunsch reduziert (flach) |
ExtractForm |
Liest die Werte aller Formularfelder |
Stamp |
Schreibt einen Text auf die Seiten: Wasserzeichen, Seitenzahlen, Eingangsstempel … |
Overlay |
Legt ein anderes PDF auf die Seiten, z. B. einen Briefbogen |
So geht die Aktion mit Dateien um:
- Die Quelle bleibt, wie sie ist. Das bearbeitete PDF wird als neue Datei geschrieben (Standard:
<Name>_edited.pdfneben der Quelle); nurReplaceSourceüberschreibt die Quelle. Ausnahme: Kommt die Quelle von einem File-Trigger und istOutputleer, wird die Datei im Jobordner direkt bearbeitet. Sie behält so den Namen ausNewNamedes Triggers, und folgende Aktionen erhalten über{{FilePath}}das bearbeitete PDF. - Das bearbeitete PDF wird nur geschrieben, wenn eine Operation das PDF ändert (
Merge,RemovePages,Rotate,Reorder,FillForm,Stamp,Overlay). Eine Aktion, die nur liest (ExtractText,ExtractForm) oder nur neue Dateien schreibt (ExtractPages,Split), lässt die Quelle in Ruhe und schreibt kein bearbeitetes PDF. - Alles oder nichts. Alle Dateien werden zuerst unter einem vorläufigen Namen geschrieben (
name.part) und bekommen ihren Namen erst, wenn alle Operationen geklappt haben. Schlägt eine Operation fehl, hört die Aktion dort auf, schreibt nichts und schlägt fehl. Wie bei jeder Aktion endet dann der Lauf oder die Fehlerbehandlung des Workflows greift. Ein Datei-Trigger, der den Ausgabeordner überwacht, sieht nie ein halb geschriebenes PDF. - Fehler werden gemeldet, nicht still übergangen: eine Seite, die das PDF nicht hat, eine fehlende Datei bei
Merge, ein Formularfeld, das es nicht gibt, ein unbekanntesOp. Die Meldung sagt, welche Operation warum fehlgeschlagen ist, z. B.Operation 2 (RemovePages): Page 9 does not exist; the PDF has 5 page(s).
Im Workflow-Editor stellen Sie die Aktion in einem Formular zusammen und probieren sie mit Schritt testen aus.
Struktur
Abschnitt betitelt „Struktur“{ "Type": "PdfEditor", "Name": "EditPdf", "Parameters": { "Source": "{{FilePath}}", "Output": "C:\\Out\\%filenamewithoutextension%_final.pdf", "Operations": [ { "Op": "RemovePages", "Pages": "last" }, { "Op": "Merge", "Files": "C:\\Vorlagen\\AGB.pdf" }, { "Op": "Stamp", "Text": "%page% / %pages%", "Position": "BottomCenter", "FontSize": 9 } ] }}| Parameter | Standard | Bedeutung |
|---|---|---|
Source |
– | Das zu bearbeitende PDF, z. B. {{FilePath}} aus einem Datei-Trigger |
Output |
%filenamewithoutextension%_edited.pdf |
Das bearbeitete PDF. Ein bloßer Name kommt neben die Quelle, ein vollständiger Pfad an beliebige Stelle. Darf nicht die Quelle selbst sein (dafür gibt es ReplaceSource). Leer bei einer Datei vom File-Trigger: Die Datei wird an Ort und Stelle bearbeitet und behält ihren Namen. |
ReplaceSource |
false |
true: Das bearbeitete PDF ersetzt die Quelle; Output wird ignoriert |
OutputFolder |
Ordner der Quelle | Wohin ExtractPages und Split ihre Dateien schreiben |
IfExists |
Overwrite |
Eine zu schreibende Datei gibt es schon: Overwrite (überschreiben) oder Error (die Aktion schlägt fehl, bevor etwas geändert wird) |
Operations |
– | Die Operationen in ihrer Reihenfolge (mindestens eine) |
In Output, OutputFolder, FileName und Files werden {{…}}-Platzhalter, %filename%, %filenamewithoutextension% und %extension% (der Quelle) sowie %yyyy%, %MM%, %dd%, %HH%, %mm%, %ss% ersetzt. Relative Pfade beginnen im Ordner der Quelle.
Seitenangaben
Abschnitt betitelt „Seitenangaben“Pages, Order und SplitBefore nehmen Seitenlisten. Die Nummern beziehen sich auf das PDF so, wie es bei dieser Operation ist, also nach den Operationen davor.
| Schreibweise | Seiten |
|---|---|
3 |
Seite 3 |
1-3, 5, 8 |
Seiten 1 bis 3; Seiten 5 und 8 (getrennt durch ,, ; oder Leerzeichen) |
8- |
Seite 8 bis zur letzten |
last, 2-last |
die letzte Seite; Seite 2 bis zur letzten |
odd, even, all |
ungerade, gerade, alle Seiten |
5-1 |
5, 4, 3, 2, 1 (für Order und ExtractPages, die die geschriebene Reihenfolge behalten) |
Wo Pages optional ist, bedeutet leer: alle Seiten.
Operationen
Abschnitt betitelt „Operationen“Jede Operation hat Op und ihre eigenen Parameter.
Merge: hängt PDFs an.
| Parameter | Standard | Bedeutung |
|---|---|---|
Files |
– | Das PDF bzw. die PDFs, getrennt durch ;. Ein Muster wie C:\In\*.pdf hängt alle Treffer nach Namen sortiert an. Eine fehlende Datei oder ein Muster ohne Treffer ist ein Fehler. |
AtStart |
false |
true: vor der ersten Seite einfügen statt am Ende |
Formularfelder der angehängten PDFs bleiben erhalten.
RemovePages: Pages (Pflicht): die zu entfernenden Seiten. Alle Seiten zu entfernen ist ein Fehler.
Rotate: Pages (leer = alle) und Degrees: 90, 180, 270 oder -90, im Uhrzeigersinn, zusätzlich zur bisherigen Drehung der Seite (Standard 90).
Reorder: Order (Pflicht): die neue Reihenfolge, z. B. 3, 1, 2. Nicht genannte Seiten folgen dahinter in ihrer bisherigen Reihenfolge; eine doppelt genannte Seite ist ein Fehler. "Order": "reverse" dreht das ganze PDF um.
ExtractPages: schreibt Seiten in ein neues PDF in OutputFolder; das bearbeitete PDF behält sie.
| Parameter | Standard | Bedeutung |
|---|---|---|
Pages |
– | Die Seiten in der geschriebenen Reihenfolge (Pflicht) |
FileName |
%filenamewithoutextension%_pages.pdf |
Name des neuen PDFs |
Split: schreibt das ganze PDF als mehrere Dateien in OutputFolder.
| Parameter | Standard | Bedeutung |
|---|---|---|
Every |
1 |
Seiten pro Datei: 1 = eine Datei pro Seite, 2 = je zwei Seiten, … |
SplitBefore |
– | Statt Every: Bei jeder dieser Seiten beginnt eine neue Datei, z. B. 4, 9 ergibt 1–3, 4–8, 9–Ende |
FileName |
%filenamewithoutextension%_%part%.pdf |
%part% = Nummer des Teils (01, 02, …), %from%/%to% = seine erste und letzte Seite. Bekämen zwei Teile denselben Namen, ist das ein Fehler. |
ExtractText: Pages (leer = alle). Der Text steht danach in Response.Text, Seiten durch einen Zeilenumbruch getrennt. Gefunden wird nur echter Text; ein gescanntes PDF ohne Textebene liefert keinen Text (es gibt keine Texterkennung/OCR).
FillForm: füllt AcroForm-Felder aus.
| Parameter | Standard | Bedeutung |
|---|---|---|
Fields |
– | Feldname → Wert, z. B. { "Name": "{{InitialData.Name}}", "Zustimmung": true } |
Flatten |
false |
true: Die Werte werden Teil der Seite; das PDF lässt sich nicht mehr ausfüllen |
Text- und Listenfelder nehmen den Text. Kontrollkästchen nehmen true/false (auch yes/no, 1/0, x, on/off, ja/nein) oder den eigenen Zustandsnamen des Kästchens; Optionsgruppen (Radio) den Namen der Option. Ein Feldname, den das PDF nicht hat, ist ein Fehler; die Meldung nennt die Felder, die es hat.
ExtractForm: liest alle Text-, Kontrollkästchen-, Options- und Listenfelder in Response.Fields (Name → Wert); ein nicht angehaktes Kästchen ergibt Off. Keine Parameter.
Stamp: schreibt einen Text auf die Seiten.
| Parameter | Standard | Bedeutung |
|---|---|---|
Text |
– | Der Text (Pflicht). %page% und %pages% werden zur Seitenzahl und zur Seitenanzahl, Datumsangaben mit %dd%.%MM%.%yyyy%. Mehrere Zeilen mit Zeilenumbruch (im JSON \n). |
Pages |
alle | Die zu stempelnden Seiten |
Position |
Center |
TopLeft, TopCenter, TopRight, Center, BottomLeft, BottomCenter, BottomRight |
FontSize |
12 |
Größe in pt (1–500) |
Bold |
false |
Fett |
Color |
#000000 |
Farbe als #RRGGBB, z. B. #C00000 für Rot |
Opacity |
100 |
Deckkraft in Prozent (0–100); 25 für ein dezentes Wasserzeichen |
Rotation |
0 |
Grad, gegen den Uhrzeigersinn, um den Ankerpunkt; 45 für ein diagonales Wasserzeichen |
Margin |
10 |
Abstand vom Seitenrand in mm (nicht bei Center) |
Die Position bezieht sich auf die Seite, wie sie angezeigt wird: Auf einer gedrehten Seite steht der Stempel aufrecht. Der Text wird in Arial gesetzt (eingebettet, daher funktionieren Umlaute, €, Griechisch und Kyrillisch); ohne Arial auf dem PC in Helvetica.
Overlay: legt ein anderes PDF auf die Seiten, z. B. einen Briefbogen.
| Parameter | Standard | Bedeutung |
|---|---|---|
OverlayFile |
– | Das PDF, das auf die Seiten kommt (Pflicht), z. B. C:\Vorlagen\Briefbogen.pdf. Ein relativer Pfad beginnt im Ordner der Quelle. |
Pages |
alle | Die Seiten, die das Overlay bekommen: leer = alle, 1, 1,2, 1-10, 1,3,5-10 … (siehe Seitenangaben) |
OverlayPage |
1 |
Welche Seite des Overlay-PDFs auf jede Seite kommt. 0 = Seite für Seite: Die erste gewählte Seite bekommt Seite 1 des Overlays, die zweite Seite 2 usw.; nach der letzten Seite des Overlays wiederholt sich diese. So bekommt bei einem Briefbogen mit Erst- und Folgeseite die erste Seite den Briefkopf und alle weiteren die Folgeseite. |
InFront |
false |
false: hinter den Inhalt (der übliche Briefbogen, der Text bleibt lesbar). true: über den Inhalt, z. B. für ein Logo oder wenn die Seite einen weißen Hintergrund hat (etwa ein Scan), der den Briefbogen sonst verdeckt. |
Opacity |
100 |
Deckkraft des Overlays in Prozent (0–100) |
Hat das Overlay eine andere Seitengröße als die Seite, wird es passend skaliert (Seitenverhältnis bleibt) und mittig gesetzt; gleich große Seiten (A4 auf A4) liegen 1:1. Gedrehte Seiten werden berücksichtigt: Das Overlay steht so, wie die Seite angezeigt wird. Jede Seite des Overlays steht nur einmal im PDF, auch wenn sie auf vielen Seiten liegt. Ein fehlendes oder passwortgeschütztes Overlay-PDF und eine OverlayPage, die es nicht hat, sind Fehler.
{ "Op": "Overlay", "OverlayFile": "C:\\Vorlagen\\Briefbogen.pdf", "Pages": "1" }Ergebnis
Abschnitt betitelt „Ergebnis“"Response": { "OutputPath": "C:\\Out\\RE-2026-0001_final.pdf", "PageCount": 5, "Files": [], "Results": [ { "Op": "RemovePages", "Status": "OK", "Message": "", "Pages": "5", "PageCount": 4 }, { "Op": "Merge", "Status": "OK", "Message": "", "Files": [ "C:\\Vorlagen\\AGB.pdf" ], "PagesAdded": 1 }, { "Op": "Stamp", "Status": "OK", "Message": "", "Pages": "1,2,3,4,5" } ], "SuccessCount": 3, "ErrorCount": 0}| Feld | Inhalt |
|---|---|
OutputPath |
Das bearbeitete PDF (bei ReplaceSource die Quelle); leer, wenn keine Operation das PDF geändert hat |
PageCount |
Seiten des bearbeiteten PDFs (der Quelle, wenn nichts geändert wurde) |
Files |
Pfade der Dateien aus ExtractPages und Split |
Text |
Nur mit ExtractText: der gelesene Text |
Fields |
Nur mit ExtractForm: Feldname → Wert |
Results |
Ein Eintrag pro ausgeführter Operation mit Status OK oder Error, der Message und Details (Seiten, Dateien, …). Nach einem Fehler laufen die folgenden Operationen nicht mehr. |
Die folgenden Aktionen lesen das Ergebnis mit {{EditPdf.Response.OutputPath}}, {{EditPdf.Response.Text}} oder {{EditPdf.Response.Fields.Feldname}} (EditPdf = der Name der Aktion). Files passt gut zu einer Loop.
Formular im Editor
Abschnitt betitelt „Formular im Editor“Im Diagramm des Workflow-Editors hat die Aktion ein Formular (im Einstellungsfeld und in der mittleren Spalte der Testansicht):
- PDF: PDF-Datei, Quelle überschreiben, Bearbeitetes PDF (leer: die Datei eines Datei-Triggers wird direkt bearbeitet, sonst
<Name>_edited.pdfneben der Quelle), Ordner für extrahierte Dateien und was bei einer vorhandenen Datei passiert. - Operationen: laufen nacheinander in der angezeigten Reihenfolge. Art wählen und Hinzufügen; jede Operation lässt sich entfernen und nach oben oder unten verschieben. Jede Art hat ihre eigenen Felder: Zusammenführen (PDFs, Vorne einfügen), Seiten entfernen, Drehen (Seiten und 90, 180, 270 oder −90 Grad), Neu ordnen, Seiten extrahieren (Seiten und Dateiname), Teilen (Seiten je Datei oder Oder teilen vor Seiten, Dateiname), Text auslesen, Formular ausfüllen (Tabelle der Felder, Fixieren), Formular auslesen, Text stempeln (Text mit
%page%und%pages%, Seiten, Position, Schriftgröße, Farbe, Deckkraft, Drehung, Abstand vom Rand, Fett) und PDF überlagern (Datei, Seite davon mit 0 = Seite für Seite, Seiten, Deckkraft, Vor dem Inhalt).
Jedes Feld nimmt auch {{…}}-Platzhalter und Werte, die Sie in der Testansicht aus der Spalte Eingabe hineinziehen; Auswahllisten, Schalter und Zahlenfelder werden mit einem {{…}} zu einem Textfeld. Parameter, die das Formular nicht kennt, stehen unter Weitere Parameter. Schritt testen führt die Aktion sofort einmal aus, mit den Daten der Schritte davor, und zeigt das Ergebnis mit Fehlern und Warnungen. Der Test bearbeitet das PDF wirklich und schreibt die Dateien; probieren Sie ihn mit einer Kopie aus.
Beispiel
Abschnitt betitelt „Beispiel“Eingangsrechnungen vorbereiten. Ein Datei-Trigger holt jedes PDF aus dem Scanner-Ordner. Die Aktion entfernt die leere letzte Seite, stempelt das Eingangsdatum rot oben rechts und legt das Ergebnis im Archivordner ab. Der gelesene Text steht danach den folgenden Aktionen zur Verfügung (z. B. einem If auf den Lieferantennamen):
{ "Name": "Eingangsrechnungen", "Autostart": true, "Trigger": { "Type": "File", "Name": "Scanner", "Parameters": { "Pool": "C:\\Scan\\Rechnungen", "Filter": "*.pdf" } }, "Actions": [ { "Type": "PdfEditor", "Name": "EditPdf", "Parameters": { "Source": "{{FilePath}}", "Output": "C:\\Archiv\\%yyyy%\\%filenamewithoutextension%.pdf", "Operations": [ { "Op": "RemovePages", "Pages": "last" }, { "Op": "Stamp", "Text": "Eingegangen am %dd%.%MM%.%yyyy%", "Pages": "1", "Position": "TopRight", "Bold": true, "Color": "#C00000" }, { "Op": "ExtractText", "Pages": "1" } ] } } ]}Ein Sammel-PDF in einzelne Rechnungen mit je zwei Seiten aufteilen, in einen eigenen Ordner:
{ "Type": "PdfEditor", "Name": "SplitInvoices", "Parameters": { "Source": "C:\\Export\\rechnungen.pdf", "OutputFolder": "C:\\Export\\einzeln", "Operations": [ { "Op": "Split", "Every": 2, "FileName": "rechnung_%part%.pdf" } ] }}{{SplitInvoices.Response.Files}} enthält danach die Pfade der neuen Dateien.
