pat.bat
Goto Top

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:
pdf_daten


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

Content-Key: 547272

Url: https://administrator.de/contentid/547272

Printed on: April 19, 2024 at 01:04 o'clock

Mitglied: 142970
142970 Feb 14, 2020 updated at 14:24:30 (UTC)
Goto Top
Member: colinardo
colinardo Feb 14, 2020, updated at Feb 16, 2020 at 10:25:45 (UTC)
Goto Top
Servus Patrick,
wie @142970 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
back-to-toppdf_rename_with_form_fields_547272.zip

Grüße Uwe
Member: LeeX01
LeeX01 Feb 15, 2020 at 12:46:07 (UTC)
Goto Top
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
Member: colinardo
colinardo Feb 15, 2020 updated at 13:23:23 (UTC)
Goto Top
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
$reader.AcroFields
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
Member: LeeX01
LeeX01 Feb 15, 2020 at 13:29:57 (UTC)
Goto Top
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
Member: colinardo
colinardo Feb 15, 2020 updated at 14:08:02 (UTC)
Goto Top
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.
Member: LeeX01
LeeX01 Feb 15, 2020 at 15:37:32 (UTC)
Goto Top
Ich habe jetzt recht lange gesucht und dann im Netz gefunden das das "Object Select Tool" wohl im deutschen in der Gruppe Druckproduktion unter (Werkzeug "Objekt bearbeiten") zu finden ist. Mit dem Tool kann ich aber trotzdem im Acrobat nichts machen. Bin ich richtig?
Member: colinardo
colinardo Feb 16, 2020 updated at 10:20:39 (UTC)
Goto Top
Dann muss ich wohl mal wieder den Stift rausholen und das aufmalen face-smile

screenshot

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  
abgefragt werden.
Member: LeeX01
LeeX01 Feb 16, 2020 at 10:08:59 (UTC)
Goto Top
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.

pdftk in.pdf output out.pdf drop_xfa

https://de.switch-case.com/70877443
Member: LeeX01
LeeX01 Feb 16, 2020 at 10:12:37 (UTC)
Goto Top
Solche Felder müssen mit
> $reader.AcroFields.Xfa.FindDatasetsNode('MeinTextfeld').innerText  
> 
abgefragt werden.

Habe das Skript oben dafür noch angepasst.

OK danke, warum auch immer, hat auch mit dem ursprünglichen Script funktioniert...
Member: pconze
pconze Apr 13, 2021 at 12:53:43 (UTC)
Goto Top
Hallo,

da ich auf der Suche nach einer speziellen Lösung bin hoffe ich, bei der Administrator-Schwarmintelligenz fündig zu werden und hab mich mal registriert.

Ich bin auf der Suche nach einer Lösung mit ähnlicher Aufgabenstellung wie hier beschrieben. Textdaten aus PDF-Formularfeldern sollen exportiert werden.

Lediglich stelle ich mir ein mehrseitiges PDF vor (jede Seite eine Produktbeschreibung) und möglichst sollten nicht nur Texte sondern ggf auch Bilder (Bildverweise/Dateiname) mit berücksichtigt oder sogar mit angezeigt werden, wenn man sie auf ein Feld auf der PDF-Seite zieht.

Letztendlich dient die PDF der Datenerfassung. Die gesammelten Daten sollen dann in einem Datenbankformat exportiert werden.

Kann man PDF-Dateien so vorbereiten bzw. benutzen?

Ich würde mich auch über eine Empfehlung freuen, wer so etwas erledigen kann.

Danke schon einmal.

Peter
Member: colinardo
colinardo Apr 13, 2021 updated at 15:26:15 (UTC)
Goto Top
Hallo Peter, willkommen auf Administrator.de!
Da das doch ein etwas anderes Thema ist bitte ich dich einen neuen Thread dafür auf zu machen, merci.

Um deine Frage zum Thema dennoch kurz zu beantworten:
Kann man PDF-Dateien so vorbereiten bzw. benutzen?
Kann man machen, ist aber sehr unüblich das so zu zweck zu entfremden. Außerdem sind die Sicherheitsmaßnahmen von PDF-Dateien auf unterschiedlichen Platformen hier sehr restriktiv und der Funktionsumfang so unterschiedlich, dass der Aufwand in keinem Verhältnis zum Nutzen steht. Sowas setzt man heutzutage eher als Webservice unabhängig von der Plattform um so das auch User mit einem einfachen Browser so etwas nutzen können. So kann man die Daten auch gleich in einer richtigen Datenbank hinterlegen.
Alternativ ist natürlich immer die Variante einer "echten" Anwendung (c#/java/.net/etc.) möglich.

Grüße Uwe