PDF Datei nach Wort durchsuchen und dieses dann als Dateiname verwenden und die Datei umbenennen.

  • Hallo zusammen,

    ich habe ein Problem und vielleicht kann man das ja mit Autoit lösen.

    Ich habe ein Verzeichnis in dem mehrere PDF Dateien liegen. Jede einzelne Datei soll anhand eines Suchwortes durchsucht werden und dann sollen die nächsten 3 Buchstaben kopiert werden. Die kopierten Inhalte sollen nun als Dateiname verwendet werden, es muss also die bestehende Datei umbenannt werden mit dem gerade kopierten Inhalt. Ist soetwas überhautp mit Autoit lösbar ?

    Wäre dankbar für jeden Tipp

    Danke und Gruß

  • Auf die Schnelle konnte ich das hier machen... Sollte klappen - rein theoretisch.

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <File.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $s_Path = @DesktopDir ; Verzeichnis, in dem gesucht werden soll (ohne Backslash)
    Global Const $s_Ext = '.pdf' ; Dateiendung, nach der gesucht werden soll... :P
    Global Const $s_Search = 'photo' ; Das zu suchende Wort

    [/autoit] [autoit][/autoit] [autoit]

    Global $a_Reg, $a_List = _FileListToArray ($s_Path, '*', 1) ; Ein Array aller Dateien im Ordner wird erstellt

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To $a_List[0]
    If StringRight ($s_Path & '\' & $a_List[$i], StringLen ($s_Ext)) = $s_Ext Then
    ; (-1) Falls die Dateiendung stimmt...
    $a_Reg = StringRegExp (FileRead ($s_Path & '\' & $a_List[$i]), $s_Search & '(...)', 1)
    ; (-1) ... wird nach dem Wort und drei nachfolgenden Zeichen gesucht
    If IsArray ($a_Reg) Then
    ; (-1) Falls das Wort gefunden wurde...
    FileMove ($s_Path & '\' & $a_List[$i], $s_Path & '\' & $a_Reg[0] & $s_Ext, 1)
    ; (-1) ... wird die Datei umbenannt
    EndIf
    EndIf
    Next

    [/autoit]

    Geht aber sicher einfacher (vorallem das mit der Dateiendung). :P

    • Offizieller Beitrag

    Ja, stimmt doch so. Schau mal in Zeile 13 - da ist es leicht verschachtelt..


    ..du hast tatsächlich PDF-Dateien, die den Text im Klartext enthalten?? Sollte mich sehr wundern und ist, wenn überhaupt, sicher die Ausnahme. ;)
    (Schau dir mal eine PDF-Datei im Editor an, dann weißt du was ich meine)

  • Hallo @ll,

    erst einmal vielen Dank für die raschen Antworten.

    $var habe es getestet und das Script funktioniert und macht fast das was es soll(siehe nachfolgende Problemstellung).
    @BugFix Hast ja Recht, dachte wenn ich ein Dokument einscanne und daraus dann ein PDF erstelle, das ich es dann im Klartext durchsuchen kann. Geht leider so nicht.
    Was ich jetzt also davor brauche, ist ein Tool welches die PDF's in Text umwandelt, damit danach innerhalb der TXT Datei nach dem Wort gesucht werden kann und die nächsten 3 Buchstaben kopiert
    werden können. Jetzt muss noch der Orginal Dateiname vom PDF mit dem kopierten Buchstaben umbenannt werden und die TXT Datei gelöscht werden. Ist das auch noch machbar ?

    Ich habe mal ein bisschen recherchiert, da ich ja nicht will das Ihr hier die ganze Arbeit habt und ich nichts dazu beitrage. Das umwandlungstool was über Commandline funktioniert heißt PDF2Text Pilot.
    Der Commandozeilen Befehl heißt: textextract.exe c:\install\test.pdf /to c:\install\test.txt
    Das funktioniert auch und wandelt meine PDF's in TXT Dateien um. Was man noch schauen muss, ob ich gleich einen Ordner angeben kann über Commandline oder ob man auch jede Datei einzeln durchlaufen kann.

    Der Ablauf des Autoit Scriptes wäre ja jetzt folgender
    - Autoscript müsste jede PDF Datei in einem Ordner erkennen diese einzeln in eine txt Datei konvertieren,
    - dann wird nach dem gewünschten Wort gesucht und die nächsten 3 Buchstaben daraus kopiert,
    - am Ende muss die Orginal PDF Datei noch umbenannt werden (die 3 Bustaben).pdf und die übrig gebliebene TXT Datei gelöscht werden

    Ist das so noch möglich ? Danke schonmal für Eure Hilfe, ich hoffe ich habe mich klar ausgedrückt.

  • Hallo zusammen,

    hat keiner eine Idee ? oder kann man es nicht umsetzen?

    Gruß Braintee

  • Hallo,

    kann man so nicht umsetzen da gescannte PDFs ("..dachte wenn ich ein Dokument einscanne ..") keinen Text enthalten, sondern nur Bildinformationen.Damit käme nur eine OCR basierte Lösung in Betracht und das ist nicht ganz so simpel (qualität der Vorlagen und ... und ... und..).

    Mfg, Reinhard

  • Hi,

    ich hatte doch geschrieben das ich ein Programm gefunden habe welches die PDF's in TXT Dateien umwandelt und man dann in diesem Dokument nach dem gesuchten Wort auch suchen kann. Also grundsätzlich habe ich auch versucht einen Ablauf zu beschrieben wie das ganze aussehen sollte, ich weiß nur nicht ob man das mit AutoIT so umsetzen kann.

    Gruß Braintee

  • Hi,

    probiere doch einfach mal (manül) aus ob PDF2text gescannte PDFs in Text umwandeln kann.

    Mfg, Reinhard

  • @chess

    Danke. Ich dachte schon ich bin total bescheuert.

    @ReFran

    Nix für ungut aber wenn das geht kannst Du mir dann helfen ?

    Gruß Braintee

  • Wir müssten uns schon auf eine gemeinsame Ausgangsposition einigen.

    PDF2TXT kann meist nur den "reinen Text" aus dem PDF exportieren, was also hier nicht hilft.
    Eine Freeware-Lösung (z.B. auf Basis von "Tesseract") scheitert meiner Meinung nach am Format PDF. Man müsste also erst einmal PDF > Bild > Tesseract. Oder hat jemand eine brauchbare PDF-OCR-Lösung als Freeware ?

    Und wenn Braintee eine kommerzielle OCR einsetzt, dann wäre sein Problem ja nur noch, die Textstelle finden und extrahieren. Dazu sollte er uns dann schon einen Beispieltext (Ergebnis seiner OCR-Soft) bereitstellen.

    Oder liege ich hier völlig falsch ?

    Gruß
    Micha_he

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Hallo zusammen,


    Zitat

    PDF2TXT kann meist nur den "reinen Text" aus dem PDF exportieren, was also hier nicht hilft.


    was ich nicht ganz verstehe wieso das nicht hilft, der export des reinen Textes reicht meiner Meinung nach völlig aus.

    Ich habe eine selbst erstellte PDF Datei in welcher nur, ich nenne es mal PC Schrift vorhanden ist, also keine handschriftlichen Dinge ausgelesen werden müssen. Das auslesen mit PDF2TXT funktioniert ja auch schon und ein Beispiel wie ich das über die Commandozeile mache steht ja oben. Das Problem ist jetzt eher der Ablauf und ob ich das alles mit Autoit so zusammegefügt werden kann, das ich eine Art Workflow habe.

    Gruß Braintee

  • Wenn das mit Deinen PDF's so mit "textextract.exe" klappt, brauchst Du doch nur noch die Kommandozeile in $var seinen Scriptvorschlag einbauen. Versuch doch einfach mal etwas und sag uns was nicht daran geht ! Oder willst Du ein fertiges Script von uns haben ?

    Einfach z.B. in $var seinem Scriptvorschlag die Zeile 13 gegen folgende austauschen (ungetestet):

    [autoit]

    RunWait(@ScriptDir & "\textextract.exe " & $s_Path & '\' & $a_List[$i] & " /to " & @TempDir & "\out.txt"
    $a_Reg = StringRegExp (FileRead (@TempDir & "\out.txt"), $s_Search & '(...)', 1)
    FileDelete(@TempDir & "\out.txt")

    [/autoit]

    Und wenn dann etwas nicht klappt, pack mal eine "demo.pdf" mit an den Beitrag, informiere uns wo wie "textectract.exe" herbekommen und dann kann man weiter schauen....

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Hallo zusammen,

    ich habe jetzt mal versucht das Script auszuführen und dabei kam eine Fehlermeldung, was wahrscheinlich daran liegt, das ich die Variablen bzw. Pfade falsch geschrieben habe. Ich verstehe das AutoIT Script noch nicht so richtig aber ich denke für Euch sind das zwei schnelle Korrekturen.


    [autoit]

    #include <Array.au3>
    #include <File.au3>
    Global Const $s_Path = "c:\install" ; Verzeichnis, in dem gesucht werden soll (ohne Backslash)
    Global Const $s_Ext = '.pdf' ; Dateiendung, nach der gesucht werden soll... :P
    Global Const $s_Search = 'Statusprotokoll' ; Das zu suchende Wort
    Global $a_Reg, $a_List = _FileListToArray ($s_Path, '*', 1) ; Ein Array aller Dateien im Ordner wird erstellt
    For $i = 1 To $a_List[0]
    If StringRight ($s_Path & '\' & $a_List[$i], StringLen ($s_Ext)) = $s_Ext Then
    ; (-1) Falls die Dateiendung stimmt...
    RunWait(@ScriptDir & "C:\Program Files (x86)\Two Pilots\PDF2Text Pilot\textextract.exe " & $s_Path & 'c:\install\' & $a_List[$i] & " /to " & @TempDir & "\out.txt"
    $a_Reg = StringRegExp (FileRead (@TempDir & "\out.txt"), $s_Search & '(...)', 1)
    FileDelete(@TempDir & "\out.txt")
    ; (-1) ... wird nach dem Wort und drei nachfolgenden Zeichen gesucht
    If IsArray ($a_Reg) Then
    ; (-1) Falls das Wort gefunden wurde...
    FileMove ($s_Path & '\' & $a_List[$i], $s_Path & '\' & $a_Reg[0] & $s_Ext, 1)
    ; (-1) ... wird die Datei umbenannt
    EndIf
    EndIf
    Next

    [/autoit]


    Gruß Braintee

  • Außerdem sollte man immer die Leerzeichen bei Pfadangaben im Hinterkopf behalten.

    In der RunWait-Angabe solltest Du dich außerdem entscheiden:
    Entweder "@ScriptDir" oder "C:\Program Files (x86)". Wo liegt denn nun das "textextract.exe" ?

    Ausgehend davon dann,
    Also z.B. statt:

    [autoit]

    RunWait("C:\Program Files (x86)\Two Pilots\PDF2Text Pilot\textextract.exe " & $s_Path & 'c:\install\' & $a_List[$i] & " /to " & @TempDir & "\out.txt")

    [/autoit]

    unter Umständen lieber:

    [autoit]

    RunWait('"C:\Program Files (x86)\Two Pilots\PDF2Text Pilot\textextract.exe" ' & $s_Path & 'c:\install\' & $a_List[$i] & " /to " & @TempDir & "\out.txt")

    [/autoit]

    (Man beachte jeweils die einfachen/doppelten Anführungszeichen !)

    Außerdem ergibt "$s_Path & 'c:\install\'" aus Deinem Beispielscript, den String "c:\install\c:\install\", was auch verkehrt sein sollte ;)

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

    3 Mal editiert, zuletzt von Micha_he (15. Juli 2012 um 13:42)

  • Hallo zusammen,

    also ich habe jetzt mal die Zeile eingefügt und da passiert nichts weiter. Es liegt wahrscheinlich schon daran, das der String eben auch falsch ist, so wie Du es schon geschrieben hast. Kann ich mir denn die Zeile einzeln in einer Art Ausgabebox anschauen ? Ich weiß schon wenn ich mir die Variablen anschaue, das der String sich aus diesen zusammensetzt aber wie der jetzt wirklich in der Ausgabe aussieht kann ich im Moment noch nicht beurteilen.

    [autoit]

    RunWait('"C:\Program Files (x86)\Two Pilots\PDF2Text Pilot\textextract.exe" ' & $s_Path & $s_Ext & $a_List[$i] & " /to " & @TempDir & "\out.txt")

    [/autoit]
  • [autoit]

    MsgBox (0, '', '"C:\Program Files (x86)\Two Pilots\PDF2Text Pilot\textextract.exe" ' & $s_Path & $s_Ext & $a_List[$i] & " /to " & @TempDir & "\out.txt")

    [/autoit]