PDF lesen Teile ausgeben in Textform

  • Hallo zusammen,

    leider habe ich nach langem hin und her mit der EDV keine Lösung gefunden und bin etwas frustriert, deshalb möchte ich eure Hilfe in Anspruch nehmen.

    Folgendes, ich bekomme jede Woche mehrere Lieferpläne aus einem SAP System als PDF per Mail zugeschickt.

    Diese PDF`s muss ich aber jede Woche in mein SAP Systerm übernehmen. Ja das ist verrückt, aber die große Firma und unsere EDV bekommt das nicht hin, dass wir die Sachen elektronisch übernehmen.

    Deshalb würde ich mich über eine kleine Hilfe freuen.


    Was muss ich jede Woche machen?

    1. Mail öffnen

    2. alle Lieferpläne (PDF) auf den Server laden

    3. Mails verschieben

    Das ist noch recht einfach.


    4. PDF öffnen

    5. Lieferplan kopieren

    6. SAP-Lieferplan mit Kunden-Lieferplannummer suchen (wurde gerade kopiert)

    7. gefundener Lieferplan Öffnen

    8. Lieferabruf öffnen

    9. alle Einteilungen markieren & löschen

    10. aus dem PDF die ersten 10 Termine markieren & kopieren

    11. die soeben kopierten Termine in SAP kopieren

    12. dann die entsprechenden Mengen (10 Stück) aus dem PDF kopieren

    13. dann die Mengen in SAP einfügen und mit CR bestätigen

    14. die Lieferabrufe nach unten scrollen (damit ich wieder mehr Platz habe)

    15. die weiteren Termine kopieren (max. 10 Stück)

    16. dann wieder in SAP einfügen

    17. dann dasselbe mit der Menge machen.

    Das mache ich so lange, bis ich alle Einteilungen übernommen habe.


    Dann prüfe ich noch die Zielmenge und ob das Gelieferte mit den Einteilungen der Zielmenge übereinstimmt (muss im Kopf ausgerechnet werden, wird im SAP nicht zusammengezählt, im PDF sind die Zahlen schon vorhanden), da die Zielmenge größer ist als das Gelieferte und Eingeteilte zusammen, dann wird noch eine Position auf den 31.12. (Folgejahr) eingefügt.


    Leider kann ich die Daten aus dem PDF nicht eins zu eins kopieren (Datum und Menge), da SAP die Spalten nicht erkennt.


    Daher möchte ich, dass die PDF`s nacheinander alle ausgelesen werden, die in dem genannten Ordner sind und mir bestimmte Dinge in eine Excel- oder TXT-Datei geschrieben werden (Wichtig: Trennzeichen muss ein TAG sein, dann erkennt SAP das als Spalte.


    Ich möchte aus den PDF`s die Daten

    - Lieferplannummer

    - Materialnummer

    -Zielmenge

    -Eingeteilte Menge

    -gelieferte Menge

    und lesen Sie die Einteilungen.

    Die Einteilungen können sich über mehrere Seiten erstrecken.

    Die PDF`s sind immer gleich aufgebaut.


    So dass ich am Ende eine Excel oder TXT Datei habe, in der alle Lieferpläne so aufbereitet und formatiert sind, dass ich mich beim Kopieren in SAP leichter tue.


    Meint ihr so etwas ist möglich und welchen Aufwand müsste ich dafür betreiben und wichtig ist das ich dafür nichts auf dem Firmenrechner installieren muss.


    Gruß Mücke

  • Hi,

    Meint ihr so etwas ist möglich

    ja

    und welchen Aufwand müsste ich dafür betreiben

    kommt drauf an....manche Programme sind in der Lage, PDF´s zu erzeugen, aus denen man dann auch tatsächlich etwas sinnvolles extrahieren kann. Teste das einfach mal, indem du bei geöffneter PDF mit CTRL-a alles markierst, dann mit CTRL-c kopierst, und diesen "Block" dann in Word oder Excel (halbwegs anständige Auto-Import/Formatierungsfunktion) oder in eine andere Office-Suite per CTRL-v einfügst. Manchmal hat man Glück und die Tabellenformatierungen werden mitgenommen....wenn du Pech hast, dann scheitert es schon daran....Versuch macht kluch...

    Ansonsten testweise einzelne Blöcke im PDF markieren und kopieren.

    Letztendlich kommt es darauf an, "irgendwie" die Daten strukturiert aus dem PDF zu bekommen, RegEx ist dein Freund....

    Wie man dann SAP automatisiert befüllt, ist wieder eine andere Baustelle. Ich hatte dabei schon Glück, die Eingabefelder waren per TAB-Taste und anderen Tastaturbefehlen anzusprechen und automatisiert auszufüllen.

    und wichtig ist das ich dafür nichts auf dem Firmenrechner installieren muss.

    DAS ist deine eigentliche Baustelle! Ja, es gibt eine portable AutoItversion, das Script muss auch keine "*.EXE" sein, falls da jemand Angst hätte, aber ich glaube ehrlich gesagt nicht, dass ein Admin, der sich schon schwer tut

    leider habe ich nach langem hin und her mit der EDV keine Lösung gefunden

    davon überzeugt werden kann, Scripte auf seiner Maschine auszuführen, die potenziell Schaden anrichten können....

  • kommt drauf an....manche Programme sind in der Lage, PDF´s zu erzeugen,

    Ja, ich kann im PDF mit LAT + Mauszeiger markieren und dann kann ich kopieren, leider wird die Tabellenstruktur nicht übernommen, daher muss ich immer zuerst die erste Spalte (Datum) und dann die 3. Spalte (Menge) kopieren und davon auch nicht mehr als 10 Stück untereinander, denn mehr Platz ist im SAP nicht vorhanden und alles was darüber hinausgeht wird abgeschnitten :-(.

    Ansonsten testweise einzelne Blöcke im PDF markieren und kopieren.

    Das klingt gut, aber wo fange ich am besten an, wie gehe ich vor?

    Gibt es ein Beispiel, wie man eine PDF-Datei ohne ein zusätzliches Programm lesen kann?

    DAS ist deine eigentliche Baustelle! Ja, es gibt eine portable AutoItversion, das Script muss auch keine "*.EXE" sein,

    Ich dachte, dass das Skript in eine EXE gepackt wird, dann kann man es einfach auf dem Computer ausführen, ohne dass ich etwas installieren muss? oder wird nicht alles, was man braucht, von Auto IT in die EXE gepackt?

    davon überzeugt werden kann, Scripte auf seiner Maschine auszuführen, die potenziell Schaden anrichten können....

    Ich wollte sie nicht davon überzeugen, sondern lieber eine EDI-Verbindung mit dem Kunden aufbauen oder ein Tool von SAP kaufen, das solche PDF`s einlesen kann. Aber für die EDI-Verbindung habe ich den Eindruck, dass sich die IT zu wenig kümmert und das SAP-PDF-Lesetool für unsere Buchhaltung zu teuer ist :-(.

    Daher möchte ich nun eine eigene Lösung erstellen, die nicht alles lahmlegt!!!

    Wie man dann SAP automatisiert befüllt, ist wieder eine andere Baustelle.

    Diesen Teil wollte ich gar nicht automatisieren, sondern dass alle PDF`s, die in einem Ordner sind, später mit den für mich relevanten Daten in einer Datei sind, so formatiert, wenn ich von dort etwas kopiere, dass es in SAP richtig erkannt wird.

    Z.B. wenn bei den Einteilungen "Datum [TAB] [TAB] Menge" formatiert ist, muss ich nicht jede Spalte einzeln kopieren, sondern kann gleich 10 Zeilen auf einmal kopieren, das wäre schon eine Erleichterung.

    Wenn mir dann pro Lieferplan auch gleich die noch offene Summe berechnet wird und immer zum 31.12. [nächstes Jahr] in die Liefereinteilungen geschrieben wird, wäre das auch noch mal eine Erleichterung.

    Allein das würde mir schon eine Menge Arbeit abnehmen, ...

  • Da war doch unlängst eine ähnliche Diskussion zum Thema SAP und Lieferpläne (falls meine grauen Zellen nicht schon in Rente sind). Ich finde sie aber derzeit nicht. Gefunden. Hier.
    SAP bietet lt. dieser Diskussion eine Funktion für Import/Export dieser Informationen.
    Google schlägt vor: https://help.sap.com/docs/SAP_DAIRY…ml?locale=de-DE

  • Zu :

    Ich dachte, dass das Skript in eine EXE gepackt wird, dann kann man es einfach auf dem Computer ausführen, ohne dass ich etwas installieren muss? oder wird nicht alles, was man braucht, von Auto IT in die EXE gepackt?

    Doch, ein als EXE Datei 'kompiliertes' Skript enthält alle benötigten Komponenten, d.h. :

    Die EXE kann, ohne Installation, auf dem Computer ausgeführt werden. Soweit die Theorie !

    In der Praxis werden solche EXE aber häufig ein Opfer der Antivirensoftware und/oder anderer Sicherheitseinstellungen (ein leidiges und seit Jahren viel diskutiertes Thema).

    Mit entsprechenden Ausnahmeregeln kann man das entschärfen. Dies setzt aber, wie von Andy bereits beschrieben, eine gewisse Flexibilität seitens der Admins voraus.

    Alternativ zur portablen Variante von AutoIt könnte man das Skript auch im Format .a3x kompilieren. Um das Skript zu starten kopiert man den Interpreter (AutoIt3.exe bzw. AutoIt3_x64.exe) aus der eigenen AutoIt-Installation auf den Zielrechner.

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • water: Ja SAP kann einiges, aber meine IT will/kann/hat keine Lust oder was auch immer, das geht nicht. Deswegen bekomme ich das nicht umgesetzt.

    Ich bin in der Nahrungskette ganz unten, habe einen Vorgesetzten über mir, dann einen SAP-Admin, dann einen IT-Admin, dann einen SAP-Gesamtverantwortlichen und dann noch meinen SAP-Finanzbeauftragten.

    Mein Vorgesetzter hält sich aus allem raus, mein SAP-Admin findet solche Automatisierungen doof, weil man sich nicht darauf verlassen kann, dass sie reibungslos funktionieren, so als würden wir beim Kopieren und Übertragen keine Fehler machen (was ich nicht lache).

    Ich habe bei meinem Kunden versucht die Daten als CSV Export zu bekommen, der kann / will aber wenn er etwas macht dies für alle Lieferanten umsetzen, was bedeutet das dies erst durch ein Gremium muss, dann muss dafür eine neue Richtlinie und Leitfaden erstellt werden, der muss dann getestet werden und erst dann kann dies ausgerollt werden, mein Kunde hat mir signalisiert das dieser Aufwand für mich / uns nicht betrieben wird.


    Also muss ich mir etwas anderes einfallen lassen, ich dachte zuerst an Excel, das ich so etwas per Makro lösen könnte, aber Excel hat keine Funktion um PDF's selbst lesen zu können, man braucht eine Drittsoftware, die ich nicht auf dem Rechner habe :-(.


    Deshalb mein Ansatz mit AutoIT.


    Musashi: Meine Hoffnung ist, dass die ExE auf dem Firmenrechner lauffähig ist, ohne dass die IT involviert werden muss, wenn ich sie trotzdem involvieren müsste, um die Datei zum Kaufen zu bekommen, würde ich es mit einem aus der IT versuchen hinzubekommen, aber dann brauche ich die ganzen SAP (IT-Ler) nicht mehr ;-).


    Bisher habe ich noch kein Beispielskript gefunden, so dass ich mit dem einen oder anderen PDF (vorerst auf dem heimischen PC) experimentieren kann.

    Ich habe noch keinen Plan, wie ich das Script an sich aufbauen soll, ... und wie ich überhaupt anfange :(


    ich dachte ja an so was in die Richtung.

    1) lade PDF

    2) Suche nach "Lieferplannummer [TAB]"

    3) gebe mir die folgenden 7 Zeichen aus


    Nummer 2&3 muss ich dann endsprechend oft wiederholen.

    VG Mücke

  • Mein herzliches Beileid! Das klingt, als ob bei Euch der Schwanz mit dem Hund wedelt ;(

  • Hallo!

    Ich würde vielleicht probieren die erzeugten PDF auszulesen (so es keine Bilder sind, sondern "erstellte" PDF) und dann das Ergebnis weiterverarbeiten. Versuchen würde ich es mit QPDF (Kommandozeilen-Tool) oder auch cPDF (coherent PDF). Beides gibt es als Freeware und können wirklich eine Menge. Abhängig von deren Ausgabe würde ich mich erst um die Weiterverarbeitung kümmern.

    viel Glück

    LG

  • Hier im Bild Rot ist für mich interessant, Schwarz musste ich aus Datenschutzgründen entfernen.

    GML: Das würde bedeuten, dass ein Programm auf dem Computer installieren muss, damit das später funktioniert? oder wie genau meinst du das?

    Gibt es etwas, das in AutoIT schon vorhanden ist, das ich dafür verwenden kann?


    VG Mücke

  • Nein da ist nichts zu installieren, nur Ausführen müßtest dürfen können.

    Ich hab mal zwei Seiten aus dem cPDF-Manual beigefügt über den Export PDF->json. Mit json kann Autoit, glaub ich (da gibts viel bessere Spezialisten), ganz gut umgehen.

    Auch qPDF kann json (hab ich aber nur gelesen nicht probiert) .

    Ev. eine weitere Möglichkeit wäre PDF Export nach csv oder txt und dann weitermachen ...

    Ich fürchte (gibt aber viel Bessere!), direkt in AutoIt wird das mühsam, deshalb mein Vorschlag mit zuerst extrahieren/konvertieren dann weiterverarbeiten (wie auch immer). Allerdings wirds wohl ohne Admins nicht gehen (ev. Ausführungs-whitelist, Firmenpolicy, USB gesperrt etc., AutoIt ist sowieso speziell da fast alle Virenscanner darauf anspringen).

    Viel Glück

    LG

  • Ich würde wie folgt vorgehen:

    Command Line Tool von z.B. hier:

    Download Xpdf and XpdfReader

    Damit extrahiert man PDF zu Text. Das Textdile kannst Du dann mit Autoit durchsuchen, Pasagen abspeichern oder wieder in PDFs umwandeln...

    Das ganze lässt sich via USB Stick realisieren...


    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • Das klingt gut und bei Dir so einfach.


    Würde das gerne mal bei mir auf dem Rechner ausprobieren.

    1) Die Xpdf Kommandozeilen Tools herunterladen: Windows 32/64-bit (Win 7 und neuer) => C:\Users\Muecke\Desktop\PDF_Lesen_Test\

    2) Zip-Datei: xpdf-tools-win-4.05.zip => C:\Users\Muecke\Desktop\PDF_Lesen_Test\xpdf-tools-win-4.05

    Jetzt habe ich folgende Ordner Struktur:

    C:\Users\Muecke\Desktop\PDF_Lesen_Test\...

    ...\xpdf-tools-win-4.05\

    => Alle möglichen Dateien und Verzeichnisse

    ...\PDF\ Beispiel.PDF

    3) Datei verschoben (...\xpdf-tools-win-4.05/bin64/pdftotext.exe nach ...\PDF\ )

    4) CMD unter Windows Start aufgerufen

    5) cmd eingabe => cd Desktop\PDF_Lesen_Testen\PDF

    6) cmd Eingabe => pdftotext Muster.pdf

    Jetzt habe ich eine gleichnamige Textdatei mit dem Inhalt der PDF, das sieht auf den ersten Blick ganz gut aus.


    Das möchte ich nun in AutoIT umsetzen.

    1) Prüfen, ob 32 oder 64, da es dafür anscheinend unterschiedliche Dateien gibt.

    2) Muster-PDF im gleichnamigen Ordner in Text umwandeln.


    Aber wie macht man das mit AutoIT?

    VG Mücke

  • Global $sSourcePDF = "[Auszulesende PDF-Datei]"
    Global $sResultFile = @DesktopDir & "\Result.txt" ; Ordner, in den deine Ergebnisse abgelegt werden. Hier der Desktop.
    Global $sXPDF = "[Kompletter Pfad der pdftotext.exe]" ; Pfad der pdftotext.exe.


    ConsoleWrite(_GetContent_PDF($sSourcePDF) & @CRLF)


    Func _GetContent_PDF($sSourcePDF)

    Local $sText = _XPDF_ToText($sSourcePDF, $g_sResultFile)
    If @error Then Exit MsgBox(0, "", "Fehler beim Lesen der PDF-Datei! (" & @error & ")" & @CRLF & "Skript wird abgebrochen.")
    Local $sString = FileRead($g_sResultFile)
    Return $sString

    EndFunc ;==>_GetContent_PDF



    Func _XPDF_ToText($sPDFFile, $sTXTFile, $sTXTPath = @ScriptDir, $iFirstPage = 1, $iLastPage = 0, $bLayout = True) ; https://www.autoitscript.com/forum/topic/16…comment=1166469
    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _XPDF_ToText
    ; Description....: Converts a PDF file to plain text.
    ; Syntax.........: _XPDF_ToText ( "PDFFile" , "TxtFile" [ TxtPath[, FirstPage [, LastPage [, Layout ]]]] )
    ; Parameters.....: PDFFile - PDF Input File.
    ; TxtFile - Plain text fileneme to convert to
    ; TxtPath - Path to the txt file (default is @ScriptDir)
    ; FirstPage - First page to convert (default is 1)
    ; LastPage - Last page to convert (default is last page of the document)
    ; Layout - If true, maintains (as best as possible) the original physical layout of the text
    ; If false, the behavior is to 'undo' physical layout (columns, hyphenation, etc.)
    ; and output the text in reading order.
    ; Default is True
    ; Return values..: Success - 1
    ; Failure - 0, and sets @error to :
    ; 1 - PDF File not found
    ; 2 - Unable to find the external program
    ; ===============================================================================================================================
    Local $sOptions

    If Not FileExists($sPDFFile) Then Return SetError(1, 0, 0)
    If Not FileExists($sXPDF) Then Return SetError(2, 0, 0)

    If $iFirstPage <> 1 Then $sOptions &= " -f " & $iFirstPage
    If $iLastPage <> 0 Then $sOptions &= " -l " & $iLastPage
    If $bLayout = True Then $sOptions &= " -layout"

    Local $iReturn = ShellExecuteWait($sXPDF, $sOptions & ' "' & $sPDFFile & '" "' & $sTXTFile & '"', $sTXTPath, "", @SW_HIDE)
    If $iReturn = 0 Then Return 1

    Return 0

    EndFunc ;==>_XPDF_ToText

    Grüße autoiter

  • ich bekomme den Fehler:

    Zitat

    >"C:\Program Files (x86)\AutoIt3\SciTE\..\AutoIt3.exe" /ErrorStdOut "C:\Users\Muecke\Desktop\PDF_Lesen_Test\RUN\run.au3"
    "C:\Users\Muecke\Desktop\PDF_Lesen_Test\RUN\run.au3" (13) : ==> Variable used without being declared.:
    Local $sText = _XPDF_ToText($sSourcePDF, $g_sResultFile)
    Local $sText = _XPDF_ToText($sSourcePDF, ^ ERROR
    >Exit code: 1


    Ich bin mir nicht ganz sicher, was nicht deklariert ist und wie ich das lösen soll.


    Zeile 13:

    Code
    Local $sText = _XPDF_ToText($sSourcePDF, $g_sResultFile)


    [EDIT]

    habe den Fehler gefunden:

    $g_sResultFile wird angegeben doch es sollte $sResultFile sein.

    Das habe ich nun Korregirt und es hat mit einer PDF geklappt.

    Das Teste ich nun in der Arbeit und schaue ob es da auch klappt, wenn ja dann kann ich weiter machen.

    Einmal editiert, zuletzt von Muecke_1982 (29. August 2024 um 14:35)

  • Sorry Muecke_1982. Schön das du den Fehler gefunden hast. 🙂

    Alles gut, ich bin schon sehr Heppy über diesen Code und das ich ihn zum Laufen bekommen habe.

    Jetzt muss ich sehen, wie ich ihn auf den Firmenrechner bekomme. Per Mail geht das nicht :( USB ist gesperrt, ... da muss ich mir noch ein paar Sachen überlegen.

  • Nein - nur Microsoft Word

    Nur Word und VBA wäre genial, denn VBA-Code kann ich mir als reinen Text per Mail schicken und dann in ein WORD-Dokument einfügen ;) und Word gibt es ja schon :)

    Dann muss ich mir deine Lösung nochmal genau anschauen, denn zur Zeit bekomme ich die AutoIT Sachen garnicht ins Firmennetzwerk rein :-(.