PowerShell - Felder in PDF auslesen und Dateiname damit erzeugen
Hallo zusammen,
ich stehe gerade vor folgender Herausforderung:
wir haben PDF Dateien, wo Felder befüllt werden bzw. wurden. Ich möchte nun ein Skript bauen, wo man die PDF auf das Skript ziehen kann, dieses dann 4 Daten/Felder aus der PDF ausliest und damit einen neuen Dateinamen für diese PDF erstellt und die Datei umbenennt.
Anbei ein Auszug aus der PDF:
Meine Frage ist nun, kann man direkt auf solche Felder einer PDF zugreifen, oder wie bekommen ich den Inhalt dieser 4 Felder am besten ausgelesen?
Ich bedanke mich Voraus.
MfG
Patrick
ich stehe gerade vor folgender Herausforderung:
wir haben PDF Dateien, wo Felder befüllt werden bzw. wurden. Ich möchte nun ein Skript bauen, wo man die PDF auf das Skript ziehen kann, dieses dann 4 Daten/Felder aus der PDF ausliest und damit einen neuen Dateinamen für diese PDF erstellt und die Datei umbenennt.
Anbei ein Auszug aus der PDF:
Meine Frage ist nun, kann man direkt auf solche Felder einer PDF zugreifen, oder wie bekommen ich den Inhalt dieser 4 Felder am besten ausgelesen?
Ich bedanke mich Voraus.
MfG
Patrick
10 Antworten
- LÖSUNG 142970 schreibt am 14.02.2020 um 12:24:16 Uhr
- LÖSUNG colinardo schreibt am 14.02.2020 um 15:22:02 Uhr
- LÖSUNG LeeX01 schreibt am 15.02.2020 um 13:46:07 Uhr
- LÖSUNG colinardo schreibt am 15.02.2020 um 13:51:17 Uhr
- LÖSUNG LeeX01 schreibt am 15.02.2020 um 14:29:57 Uhr
- LÖSUNG colinardo schreibt am 15.02.2020 um 14:36:43 Uhr
- LÖSUNG LeeX01 schreibt am 15.02.2020 um 16:37:32 Uhr
- LÖSUNG colinardo schreibt am 16.02.2020 um 10:27:00 Uhr
- LÖSUNG LeeX01 schreibt am 16.02.2020 um 11:08:59 Uhr
- LÖSUNG LeeX01 schreibt am 16.02.2020 um 11:12:37 Uhr
- LÖSUNG colinardo schreibt am 16.02.2020 um 10:27:00 Uhr
- LÖSUNG LeeX01 schreibt am 15.02.2020 um 16:37:32 Uhr
- LÖSUNG colinardo schreibt am 15.02.2020 um 14:36:43 Uhr
- LÖSUNG LeeX01 schreibt am 15.02.2020 um 14:29:57 Uhr
- LÖSUNG colinardo schreibt am 15.02.2020 um 13:51:17 Uhr
- LÖSUNG LeeX01 schreibt am 15.02.2020 um 13:46:07 Uhr
LÖSUNG 14.02.2020, aktualisiert um 15:24 Uhr
Suchfunktion hier im Forum liefert dir die Antwort
https://administrator.de/contentid/541199
https://administrator.de/forum/pdf-formular-daten-excel-f%C3%BCttern-445 ...
https://administrator.de/contentid/541199
https://administrator.de/forum/pdf-formular-daten-excel-f%C3%BCttern-445 ...
LÖSUNG 14.02.2020, aktualisiert 16.02.2020
Servus Patrick,
wie @soccer oben schon im ersten Link verlinkt hat, ein damit leicht abgewandeltes Skript für die Verwendung mit Formularfeldern.
Anzupassen sind in den Variablen im Header der Pfad in dem die PDFs liegen, und die korrekten Feldnamen der Formularfelder in der Hashtable $fieldnames. Die Feldnamen der Formularfelder finden sich in den Eigenschaften der Felder (Kontextmenü).
Das Muster nachdem umbenannte wird lässt sich in Zeile 76 nach Gusto anpassen.
Die benötigte DLL zum Auslesen der PDFs wird bei nicht Vorhandensein in das Skriptverzeichnis nachgeladen, Schreibrechte sind dort also erforderlich sofern die DLL dort noch nicht hinterlegt ist.
Download des Skripts inkl. Demo-PDF und Kommentaren zu jeder Codezeile hier
Grüße Uwe
wie @soccer oben schon im ersten Link verlinkt hat, ein damit leicht abgewandeltes Skript für die Verwendung mit Formularfeldern.
Anzupassen sind in den Variablen im Header der Pfad in dem die PDFs liegen, und die korrekten Feldnamen der Formularfelder in der Hashtable $fieldnames. Die Feldnamen der Formularfelder finden sich in den Eigenschaften der Felder (Kontextmenü).
Das Muster nachdem umbenannte wird lässt sich in Zeile 76 nach Gusto anpassen.
Die benötigte DLL zum Auslesen der PDFs wird bei nicht Vorhandensein in das Skriptverzeichnis nachgeladen, Schreibrechte sind dort also erforderlich sofern die DLL dort noch nicht hinterlegt ist.
Download des Skripts inkl. Demo-PDF und Kommentaren zu jeder Codezeile hier
pdf_rename_with_form_fields_547272.zip
Grüße Uwe
LÖSUNG 15.02.2020 um 13:46 Uhr
Hallo Uwe,
ich habe gerade versucht das auszuprobieren, bekomme aber die Feldnamen nicht aus einem PDF (Kontextmenü funktioniert nicht). Soweit ich das erkennen kann scheint das Problem zu sein das das PDF nicht mit Acrobat sondern Lifecycle erstellt worden ist. Hab da auf dei schnelle nichts brauchbares im Web gefunden. Hast du evtl. auch ein kleines Script um alle enthaltenen Felder aus einem PDF auszulesen oder kennst du noch eine andere Möglichkeit?
Beste Grüße
ich habe gerade versucht das auszuprobieren, bekomme aber die Feldnamen nicht aus einem PDF (Kontextmenü funktioniert nicht). Soweit ich das erkennen kann scheint das Problem zu sein das das PDF nicht mit Acrobat sondern Lifecycle erstellt worden ist. Hab da auf dei schnelle nichts brauchbares im Web gefunden. Hast du evtl. auch ein kleines Script um alle enthaltenen Felder aus einem PDF auszulesen oder kennst du noch eine andere Möglichkeit?
Beste Grüße
LÖSUNG 15.02.2020, aktualisiert um 14:23 Uhr
Servus,
also damit du die Feldnamen angezeigt bekommst musst du z.B. in Acrobat das spezielle Object Select Tool nutzen, womit du Formularfelder selektieren und bearbeiten kannst, oder du bearbeitest das PDF als Formular in Acrobat dann siehst du die Namen ebenfalls, oder du lässt dir den Object-Tree des PDFs einblenden, oder du lässt dir im Skript in der Schleife nach Zeile 65 mit
die verfügbaren Felder des PDFs auf der Konsole ausgeben.
In Lifecycle kannst du die Objekt-Namen im Normalfall ja auch direkt übernehmen.
Gibt also genug Möglichkeiten 😉.
Grüße Uwe
also damit du die Feldnamen angezeigt bekommst musst du z.B. in Acrobat das spezielle Object Select Tool nutzen, womit du Formularfelder selektieren und bearbeiten kannst, oder du bearbeitest das PDF als Formular in Acrobat dann siehst du die Namen ebenfalls, oder du lässt dir den Object-Tree des PDFs einblenden, oder du lässt dir im Skript in der Schleife nach Zeile 65 mit
$reader.AcroFields
In Lifecycle kannst du die Objekt-Namen im Normalfall ja auch direkt übernehmen.
Gibt also genug Möglichkeiten 😉.
Grüße Uwe
LÖSUNG 15.02.2020 um 14:29 Uhr
Servus Uwe,
danke für den Tipp. Ich selbst habe leider kein Lifecycle, wenn ich das PDF mit Acroat bearbeiten will kommt die Meldung "Dieses Formular kann in Acrobat nicht bearbeitet werden, verwenden Sie Lifecycle". Das Object Select Tool steht leider auch nicht zur Verfügung.
https://answers.acrobatusers.com/How-activate-Select-Object-tool-Acrobat ...
Ich geh mal was Essen, dann versuch ich das Script so anzupassen wie du sagst.
Beste Grüße
danke für den Tipp. Ich selbst habe leider kein Lifecycle, wenn ich das PDF mit Acroat bearbeiten will kommt die Meldung "Dieses Formular kann in Acrobat nicht bearbeitet werden, verwenden Sie Lifecycle". Das Object Select Tool steht leider auch nicht zur Verfügung.
https://answers.acrobatusers.com/How-activate-Select-Object-tool-Acrobat ...
Ich geh mal was Essen, dann versuch ich das Script so anzupassen wie du sagst.
Beste Grüße
LÖSUNG 15.02.2020, aktualisiert um 15:08 Uhr
Das Object Select Tool steht leider auch nicht zur Verfügung.
Wenn du Acrobat Pro hast steht das Tool immer zur Verfügung, ist nur meist nicht direkt in der Symbolleiste verlinkt. Genauso wie der Object-Tree den man sich links in der Baumansicht anzeigen lassen kann, wo die Namen ebenfalls stehen.Das geht hier auch testweise mit einem vom Lifecycle Designer erstellten PDF einwandfrei.
LÖSUNG 15.02.2020 um 16:37 Uhr
LÖSUNG 16.02.2020, aktualisiert um 11:20 Uhr
Dann muss ich wohl mal wieder den Stift rausholen und das aufmalen 
Edit: Beachte aber das bei LifeCycle Forms die Daten nicht wie oben im Skript aufgeführt ausgelesen werden da die Daten in LifeCycle Forms in XML (xfa Format) abgelegt werden.
Solche Felder müssen je evt. mit
abgefragt werden.
Edit: Beachte aber das bei LifeCycle Forms die Daten nicht wie oben im Skript aufgeführt ausgelesen werden da die Daten in LifeCycle Forms in XML (xfa Format) abgelegt werden.
Solche Felder müssen je evt. mit
$reader.AcroFields.Xfa.FindDatasetsNode('MeinTextfeld').innerText
LÖSUNG 16.02.2020 um 11:08 Uhr
Danke dir das hat wirklich geholfen, hab die Felder auslesen können und das Script ist ohne Probleme durchgelaufen.
Hab mir derweilen mal angeschaut was es mit den Lifecycledokumenten auf sich hat. Lifecycle erstellt wohl dynamische PDF Formulare mit einem XFA header im Gegensatz zu Acrobat was statische PDFs erstellt.
Vielleicht auch für jemanden interessant.
Mit PDFTK kann man die XFA Informationen entfernen und dann lässt sich das PDF auch mit Acrobat bearbeiten. Hat problemlos funktioniert ohne das Formate, Felder oder Sonstiges beschädigt worden wären.
https://de.switch-case.com/70877443
Hab mir derweilen mal angeschaut was es mit den Lifecycledokumenten auf sich hat. Lifecycle erstellt wohl dynamische PDF Formulare mit einem XFA header im Gegensatz zu Acrobat was statische PDFs erstellt.
Vielleicht auch für jemanden interessant.
Mit PDFTK kann man die XFA Informationen entfernen und dann lässt sich das PDF auch mit Acrobat bearbeiten. Hat problemlos funktioniert ohne das Formate, Felder oder Sonstiges beschädigt worden wären.
pdftk in.pdf output out.pdf drop_xfa
LÖSUNG 16.02.2020 um 11:12 Uhr