Zum Inhalt springen

PDFEditor

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.pdf neben der Quelle); nur ReplaceSource überschreibt die Quelle. Ausnahme: Kommt die Quelle von einem File-Trigger und ist Output leer, wird die Datei im Jobordner direkt bearbeitet. Sie behält so den Namen aus NewName des 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 unbekanntes Op. 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.

{
"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.

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.

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" }
"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.

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.pdf neben 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.

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.