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

  • Ersetze mal Deine RunWait-Zeile durch:

    [autoit]

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

    [/autoit]

    Dann wirst Du mindestens schon einmal feststellen, das Deine Variablen "$s_Path & $s_Ext & $a_List[$i]" in dieser Reihenfolge etwas wie:

    "c:\install.pdfdemo.pdf" ergibt ! Was willst Du damit im Befehl erreichen ?

    Wenn Du den Filterparameter vom _FileListToArray()-Befehl nutzt, erhälts Du schon einmal nur die PDF's. Wenn Du dann die Variable vernünftig zusammensetzt, müsste etwa dies dabei herauskommen:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <File.au3>
    Global Const $s_Path = "c:\install" ; Verzeichnis, in dem gesucht werden soll
    Global Const $s_Ext = '*.pdf' ; Dateiendung
    Global Const $s_Search = 'Statusprotokoll'
    Global $a_Reg, $a_List = _FileListToArray ($s_Path, $s_Ext, 1) ; Ein Array aller PDF's im Ordner wird erstellt

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

    For $i = 1 To $a_List[0]
    $sCmd = '"C:\Program Files (x86)\Two Pilots\PDF2Text Pilot\textextract.exe" ' & $s_Path & '\' & $a_List[$i] & " /to " & @TempDir & "\out.txt"
    ;MsgBox(0,"",$sCmd) ; Zum Debuggen das ";" ganz am Anfang entfernen !
    RunWait($sCmd)
    $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
    Next

    [/autoit]

    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"

    Einmal editiert, zuletzt von Micha_he (15. Juli 2012 um 18:46)

  • Hi Micha_he

    also jetzt kommt eine Message Box und die Pfade bzw. der Befehl passt. Das Problem ist jetzt, das das Programm Textextract abstürzt nachdem die MSG geschlossen ist. Ich habe dann das Script mal umgebaut das er nur nach einer Datei sucht und diese dann verwendet, da ich dachte eventuell liegt es an dem Array mit welchem das Textextract Tool nicht zurecht kommt. Leider kommen die Abstürze auch bei einer einzelnen Datei sodas ich jetzt nicht genau weiß warum das Programm abstürzt.

    Was eventuell sein kann, das mir noch Rechte fehlen. Kann ich das Script irgendwie als Administrator ausführen ? Ansonsten muss ich es vielleicht mal compilieren und als exe Datei nochmal versuchen.

    Habt Ihr vielleicht eine Idee was das noch sein kann ?

    Gruß Braintee

  • Ich weiß ja nicht ob es noch von Interesse ist. Aber ersetze mal die bekannten 3 Zeilen gegen folgendes:

    [autoit]

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

    [/autoit]

    Sie enthält 2 Änderungen. Erstens wird das Kommando statt per MsgBox anzuzeigen in die Zwischenablage kopiert. So kannst Du eine eigene Kommandozeile öffnen und dort den Befehl testen. Fehlende Adminrechte schließe ich mal aus, weil Du ja schriebst das Du das "textextract.exe" ja bereits (wohl unter gleichem Benutzer/gleiche Rechte) getestet hast und es dort lief.

    Als mögliche Lösung ist die Änderung 2.
    Der 2te Parameter des RunWait() ist das Arbeitsverzeichnis. Unter Umständen benötigt der Befehl, Daten aus Unterverzeichnissen, welche er ohne das Arbeitsverzeichnis nicht findet. Default ist nämlich das Script-Verzeichnis !

    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"

    Einmal editiert, zuletzt von Micha_he (20. Juli 2012 um 14:42)

  • Wenn die PDF-Datei nicht verschlüsselt ist, dann müsste man doch den Text auch mit FileRead erhalten und dann mit StringInStr suchen können. Notfalls im Binärmodus öffnen und suchen.
    Du kannst ja mal mit einem Hex-Editor schauen, ob der gewünschte Text im Klartext in der Datei steht.

    • Offizieller Beitrag

    Wenn die PDF-Datei nicht verschlüsselt ist, dann müsste man doch den Text auch mit FileRead erhalten


    Ich hab mal diverse PDF-Dateien (alle unverschlüsselt) im Hex-Editor angeschaut: Kein Klartext, ist halt ein eigenes Format. Gibt vielleicht Ausnahmen, aber darauf würde ich mich nicht verlassen.

  • Hi Micha_He,


    [autoit]

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

    [/autoit]

    ich habe jetzt mal Deinen Vorschlag umgesetzt aber er bringt mir eine Fehlermeldung, welche ich auch durch suchen nicht wegbekommen habe. Kannst Du mir sagen was das sein könnte ?


    Gruß Braintee

  • Hallo zusammen,

    also das auslesen der Zeile hat jetzt soweit funktioniert und ich habe auch die Pfade soweit angepasst das es jetzt richtig ist. Das Programm stürtzt aber immer noch ab, ich habe dann mal alles entfernt das wirklich nur noch eine Datei konvertiert wird. Was ich jetzt gemerkt habe, das das Programm immer dann abstürzt wenn ich die RunWait Zeile drin lassen. Sobald ich die entferne stützt zwar das Programm nicht mehr ab aber die Datei wird trotzdem nicht konvertiert. Warum benötige ich die Zeile eingentlich ? Normalerweise wartet das Runwait doch nur solange bis das Programm beendet ist oder ? ´Hier nochmal mein Quellcode.


    [autoit]

    #include <Array.au3>
    #include <File.au3>
    #include<Memory.au3>
    #include<WinAPI.au3>
    #include<Constants.au3>
    #include<Security.au3>
    #include<StructureConstants.au3>
    Global Const $s_Path = "c:\install\" ; Verzeichnis, in dem gesucht werden soll
    Global Const $s_Ext = '*.pdf' ; Dateiendung
    Global Const $s_Ext2 = 'test.pdf' ; Dateiendung
    Global Const $s_Search = 'Statusprotokoll'
    ; Global $a_Reg, $a_List = _FileListToArray ($s_Path, $s_Ext, 1) ; Ein Array aller PDF's im Ordner wird erstellt
    ; For $i = 1 To $a_List[0]
    $sCmd = '"C:\Program Files (x86)\Two Pilots\PDF2Text Pilot\textextract.exe" ' & $s_Path & $s_Ext2 & " /to " & $s_Path & "out.txt"
    ClipPut($sCmd)
    ; RunWait($sCmd, "C:\Program Files (x86)\Two Pilots\PDF2Text Pilot")
    ; $a_Reg = StringRegExp (FileRead ($s_Path & "out.txt"), $s_Search & '(...)', 1)
    ; FileDelete($s_Path & "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 & '\' $s_Path & '\' & $a_Reg[0] & $s_Ext, 1)
    ; (-1) ... wird die Datei umbenannt
    ; EndIf
    ; Next

    [/autoit]


    Gruß Braintee

  • Was ich jetzt gemerkt habe, das das Programm immer dann abstürzt wenn ich die RunWait Zeile drin lassen. Sobald ich die entferne stützt zwar das Programm nicht mehr ab aber die Datei wird trotzdem nicht konvertiert.

    Stop, lass mich überlegen ?
    Vielleicht weil der Befehl den Du in dem AutoIt-Script mit der RunWait()-Zeile ausführst, die von die selbst vorgeschlagene Kommandozeile, mit dem von Dir genannten Programm "textaxtract.exe", startet !!

    Warum wird also wohl nichts konvertiert, wenn Du die Zeile auskommentierst ?

    P.S.: Hast Du die Kommandozeile, welche sich nach einem Programmdurchlauf (auch wenn es abstürzt) in der Zwischenablage befindet, mal in einer "Eingabeaufforderung" gestartet ? Und was passiert dort ? Ich glaube Du versuchst etwas mit AutoIt zu realisieren, was grundlegend irgendwo ein Problem aufweist.
    Probiere einfach mal die Konvertierung einer einzelnen Datei per "Eingabeaufforderung" und schreibe anschließend den genauen Befehl auf und wie der aktuelle Ordner war, als Du ihn erfolgreich ausgeführt hast.

    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"

  • Hi Micha_he,


    Zitat

    Vielleicht weil der Befehl den Du in dem AutoIt-Script mit der RunWait()-Zeile ausführst, die von die selbst vorgeschlagene Kommandozeile, mit dem von Dir genannten Programm "textaxtract.exe", startet !!

    Also das Runwait habe ich mir ja nicht selbst ausgedacht. Ich weiß auch nicht genau warum ich das brauche, ich dachte immer das der Befehl das Programm einfach solange offen hält bis es alles fertig abgearbeitet hat.


    Zitat

    P.S.: Hast Du die Kommandozeile, welche sich nach einem Programmdurchlauf (auch wenn es abstürzt) in der Zwischenablage befindet, mal in einer "Eingabeaufforderung" gestartet ? Und was passiert dort ? Ich glaube Du versuchst etwas mit AutoIt zu realisieren, was grundlegend irgendwo ein Problem aufweist.
    Probiere einfach mal die Konvertierung einer einzelnen Datei per "Eingabeaufforderung" und schreibe anschließend den genauen Befehl auf und wie der aktuelle Ordner war, als Du ihn erfolgreich ausgeführt hast.


    Ich habe die gleiche Zeile in die Kommandozeile kopiert wie es in dem Script steht und das funktioniert problemlos. Deshalb wundert mich das ja so und deshalb bin ich auch so ratlos.

    Gruß Braintee