0

Text aus PDF zerlegen

Hallo zusammen

von unserem Auftraggeber bekommen wir ein teilausgefülltes PDF die wir ausdrucken und dann bei Kunden erweitern/ausfüllen. Ich möchte nun die Daten vorab in Ninox haben dazu kopiere ich den Text der PDF in ein Rich-Text Feld.

Dort will ich nun über einen Button die Werte auslesen und dementsprechend mein Formular, das sie gleichen Felder hat wie die PDF, mit den Werten von dem PDF ausfüllen.

Wie kann ich den String in dem Rich-Text Feld nun so Zerlegen dass ich die Infos einlesen kann.

Vor allem an den Stellen wo die Länge unklar ist wie bei Gemeinde:  xxxxxxx und Ansprechperson: xxxxxxx.  Hier müsste ich ja z.B.: für den Gemeindenamen den Text zwischen Gemeinde:  und Ansprechperson:  auslesen

für die Ansprechperson müsste ich den Text zwischen Ansprechperson: und Zeilenumbruch auslesen

Für die Stellen mit [X] en habe ich schon die Lösung gefunden:

if contains(Text, "Eintritt ins Haus: [X] UG [ ] EG [ ] Waschk [ ] Garage [ ] Schrank") then
    alert("JA UG");
    'Eintritt ins Haus' := 1
else
    if contains(Text, "Eintritt ins Haus: [ ] UG [X] EG [ ] Waschk [ ] Garage [ ] Schrank") then
        alert("JA EG");
        'Eintritt ins Haus' := 2
    else
        if contains(Text, "Eintritt ins Haus: [ ] UG [ ] EG [X] Waschk [ ] Garage [ ] Schrank") then
            alert("JA WaschK");
            'Eintritt ins Haus' := 3
        else
            if contains(Text, "Eintritt ins Haus: [ ] UG [ ] EG [ ] Waschk [X] Garage [ ] Schrank") then
                alert("JA Garage");
                'Eintritt ins Haus' := 4
            else
                if contains(Text, "Eintritt ins Haus: [ ] UG [ ] EG [ ] Waschk [ ] Garage [X] Schrank") then
                    alert("JA Schrank");
                    'Eintritt ins Haus' := 5
                else
                    alert("nichts angekreuzt");
                    'Eintritt ins Haus' := null
                end
            end
        end
    end
end

schon mal Danke für Ideen

Gruß

Andreas

3 Antworten

null
    • T_Bartzsch
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Sieht das PDF immer gleich aus? Es gibt auch die Möglichkeit via API das PDF an eine Texterkennung (OCR) zu schicken. Du bekommst dann als Antwort ein JSON zurück, welches Du dann automatisch "aufdröseln" und in die entsprechenden Datenfelder in der Ninox verteilen kannst. Das ist vielleicht am Anfang etwas aufwändiger, aber nachher ziehst Du das PDF einfach in ein Bildfeld und der Rest läuft automatisch...

    Ansonsten schau dir mal Reguläre Ausdrücke (RegEx) an. Da gibt es auch hier im Forum einiges zu lesen. Interessante Funktionen dabei sind: extractx() und replacex()...

    Für obiges Beispiel würde ich via RegEx nach dem String "Gemeinde: " - also mit Doppelpunkt und Leerzeichen suchen sowie nach dem String "Ansprechperson:" - und alles dazwischen ist das, was Du haben möchtest.

    Sagen wir Du hast ein Textfeld "Gemeinde" und dein Rich-Textfeld mit dem kopierten Text. Dann kannst Du via Script (Button) mit 

    Gemeinde := extractx(text(RICHTEXTFELD), "(Gemeinde:\s*)(.*)( Ansprechpartner)","$2")

    alles herauslesen, was zwischen "Gemeinde: " und " Ansprechpartner" steht. Du arbeitest hierbei mit Gruppen. Die erste Gruppe ist "Gemeinde: ", die zweite Gruppe alles dazwischen (.*) und die dritte Gruppe ist " Ansprechpartner".... mit $2 holst Du dir die zweite Gruppe in dein Textfeld...

      • Andreas_Kappes
      • vor 1 Jahr
      • Gemeldet - anzeigen

      T. Bartzsch Vielen Dank das klappt super 👍

      Bei einem Wert vor einem Zeilenumbruch währe dann die 3 Gruppe ebenfalls mit .* zu kennzeichnen ?!?

      'Anschluss-ID' := extractx(text(Text), "(Anschluss-ID:\s*)(.*)(.*)", "$2")
      

      klappt beim ersten Versuch oder gibt es ein Code für den Zeilenumbruch nicht das dies jetzt nur Zufällig so klappt 🤔

      Gruß

      Andreas

    • T_Bartzsch
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Schau mal auf regex101.com. Da hast Du eine Sandbox für regex-Befehle und findest auch eine Referenz für die Operatoren. Da findestDu dann auch \n für Neue Zeile oder \r für Enter (Carriage Return) usw.

    Dort kannst Du auch deinen Text reinkopieren und rumprobieren. Ninox unterstützt soweit ich weiß sowieso kein multiline - daher gelten Treffer immer nur für eine Zeile.

    Also im Fall Anschluss-ID einfach nach der Gruppe "Anschluss-ID: " suchen und in einer weiteren Gruppe alles Folgende (.*)

    ("." meint hierbei ein einzelnes Zeichen (Buchstabe, Zahl, Satzzeichen - was auch immer) und "*" steht für "Kein oder mehrere" von - in dem Fall von ".")

    Wie gesagt - regex101.com

Content aside

  • vor 1 JahrZuletzt aktiv
  • 3Antworten
  • 111Ansichten
  • 2 Folge bereits