Regel mit Text scannen bestimmtes Datum auslesen

Guten Tag,
es gibt zum Thema schon einige Beiträge, allerdings finde ich für mich keine Lösung.
Wir haben Rechnungen (Beispiel hier von DHL) mit verschiedenen Datum-Angaben im Dokument.
Benötigt wird das Rechnungsdatum, um das Dokument umzubenennen.
Wir verwenden DEVONthink Server.
Egal, welchen Platzhalter ich verwende (Dokumentendatum, Neuestes, Ältestes) es wird fast immer ein falsches Datum gewählt. Auch das Erstellungsdatum geht nicht, das ist immer einen Tag später als das richtige Rechnungsdatum.
Wie funktioniert das Thema mit dem „Text scannen“ und dann String, Präfix / Suffix.
Da blicke ich noch nicht durch. Probieren hat bisher keinen Erfolg gebracht.
Kann mir jemand helfen?
Vielen Dank.
Rechnung DHL P_6323779776.001566055177.pdf (66.4 KB)

1 Like

Ich würde es (wie fast immer) mit einem regulären Ausdruck versuchen. Was gehen könnte, wäre “Text scannen nach” (wobei eben “regulärer Ausdruck” ausgewählt sein muss)
\d+\n(\d\d)\.(\d\d)\.(\d{4})

und dann “Name ändern” in \3-\2-\1 Rechnung DHL Name

Da die relevante Stelle im Text so aussieht

SEPA Mandatsreferenz: Gläubiger-ID:
1566055177
31.07.2022

spricht einiges dafür, dass der reguläre Ausdruck so funktionieren könnte.

Es ist wirklich komisch, aber sehr, sehr viele PDFs kommen mit so einem eigenartigen Textlayer, bei dem der Text spalten- statt zeilenweise ausgeliefert wird (z.B. auch etliche meiner Kontoauszüge). Keine Ahnung, warum. Jedenfalls muss man deshalb so unnatürlich nach der Rechnungsnummer gefolgt vom Datum suchen.

Zur Erklärung: Der reguläre Ausdruck sucht nach mindestens einer Ziffer (\d+) gefolgt von einem Zeilenumbruch (\n). Dann sollen zwei Ziffern (\d\d) gefolgt von einem Punkt (\.) folgen, und das zweimal. Ganz zum Schluss dann nochmal vier Ziffern (\d{4}). Diese 2-2-4 Ziffern werden in Klammern gesetzt, damit man sich beim Ersetzen auf sie beziehen kann (“capturing groups”). Beim Ersetzen werden sie dann in der ISO-Reihenfolge, also als yyyy-mm-dd ausgegeben: \3-\2-\1

3 Likes

Mit diesem Beispiel hat die Erkennung des Datums hier einwandfrei funktioniert, eventuell hat bereits die leichte Bearbeitung des PDF-Dokuments durch Hinzufügen des Pfeiles die Textebene so verändert, dass es nun passt.

Hier habe ich ein originales PDF mit das mit falschem Datum umbenannt wurde.
2022-07-01 Rechnung DHL P_6323779776.001700248426.pdf (65.5 KB)

Interessehalber: Wieso ändert sich die _Text_ebene, wenn man einen Pfeil hinzufügt? Und: Gibt es eigentlich eine Erklärung dafür, warum der Text _spalten_weise angeordnet wird? Lustigerweise scheint pdf.js (die PDF-Anzeigemaschine in Firefox) den Text übrigens anders zu sehen als PDFKit: da kann ich jedenfalls “Rechnungsdatum” und das Datum auf derselben Zeile markieren. In PDFKit geht das nicht, da bekomme ich nur die Texte (Rechnungsnummer, -datum usw) als Spalte und dann die dazugehörigen Werte als nächste Spalte.

Das sind die Geheimnisse des PDFkits :slight_smile:

@chrillek
Ich habe nach der Methode die originale PDF-Datei „behandelt“.
Da kam dieser Name heraus.
2022-07-01 Rechnung DHL Rechnung DHL P_6323779776.001700248426
Datum passt leider nicht.

Die beiden Dokumente unterscheiden sich erheblich, d.h. es liegt nicht an der Bearbeitung, sondern an diesen Unterschieden. Im zweiten Dokument findet DEVONthink allein 20 unterschiedliche Daten.

1 Like

Zeig’ mal bitte die Regel. So kann man ja gar nichts sagen.

Hier jedenfalls geht’s (die Regel gibt den neuen Namen nur aus, ändert ihn aber nicht):


Bitte

Die nächste Version wird die automatische Erkennung verbessern und die Häufigkeit der Daten berücksichtigen, so dass es in beiden Fällen klappt.

Es klingt interessant, dass Sie schon mit der nächsten Version arbeiten.

Als Entwickler nicht so ungewöhnlich :slight_smile:

Wann das Update rauskommt wird wie immer sicher nicht verraten?

Releases werden grundsätzlich nie von uns angekündigt, höchstens ein grober Zeitraum.

…und ich stelle mir vor wie Jim sich jedes Mal wenn du das tust entsetzt die Augen zu hält :see_no_evil::stuck_out_tongue_winking_eye:

Wie gesagt, mit der ersten Datei und der gezeigten Regel wird hier das richtige Datum erkannt. Warum das bei dir nicht klappt, ist mir nicht klar. Ist das wirklich dieselbe Datei, also die mit den roten Markierungen?

Ich vermute, weil ich die roten Markierungen rein gemacht habe, hat sich die Textschicht geändert.
Das 2. PDF ist die originale Datei, welche von den DEVON-Regeln bearbeitet wird.
Vielen Dank.

Na ja, das sind ganz offensichtlich nicht dieselben Dokumente: Eins hat drei, das andere fünf Seiten. Und es handelt sich auch um andere Rechnungsnummern.

Und in dem Textlayer des zweiten Dokuments (das mit den fünf Seiten) kommt eben auch der Einlieferungszeitraum vor dem Rechnungsdatum. Yuck.

Aber: Das lässt sich durch eine Änderung des regulären Ausdrucks abfangen:
\d{10,}+\n(\d\d)\.(\d\d)\.(\d{4})
findet nur noch ein Datum, wenn in der Zeile direkt davor mindestens 10 Ziffern stehen. Das passt auf die Rechnungsnummer, aber nicht auf die Blatt-/ICR-Nummern.

Leider sind die Textlayer in vielen PDFs völliges Chaos, man muss da also ggf. herumprobieren, bis man einen passenden regulären Ausdruck gefunden hat. Oder tatsächlich programmieren, da lässt sich dann noch mehr machen.

Oder auf die nächste Version warten :slight_smile:

1 Like