PDF-Split für Sammel-Dokumente
Gescannte Sammel-PDFs (mehrere Dokumente in einer Datei) werden über die Split-Vorschaltstufe automatisch in Einzeldokumente zerlegt und anschließend regulär importiert. Die Stufe läuft vor der normalen Import-Pipeline.
Funktionsprinzip
Das Wurzelverzeichnis Split:SplitPath spiegelt die normale Import-Verzeichnisstruktur. Eine Sammel-PDF wird seitenweise analysiert; jedes erkannte Einzeldokument landet als eigenständige PDF im entsprechenden Unterverzeichnis von ImportPath:
C:\Archivimport-Split\ <- SplitPath
Belege\
Lieferschein\
sammel.pdf <- Sammel-PDF mit 3 Lieferscheinen
nach Split:
C:\Archivimport\ <- ImportPath
Belege\
Lieferschein\
12000-1.pdf <- Einzeldokument (Identifier aus Barcode/OCR)
20100-5.pdf
20100-5_2.pdf <- Duplikat-Identifier: Zähler-Suffix (_2, _3, ...)
C:\Archivimport-Split\
Belege\
Lieferschein\
Erfolgreich\
sammel.pdf <- die Sammel-PDF selbst, nach dem Zerlegen verschoben
Die Sammel-PDF wird wie eine regulär verarbeitete Datei behandelt: vor dem Zerlegen wandert sie
in das Arbeitsverzeichnis InArbeit (konfigurierbar via WorkFolder) — scheitert dieses Verschieben,
weil die Datei noch im Zugriff ist, wird sie nicht gesplittet und der nächste Lauf versucht es erneut
(verhindert doppelt importierte Einzeldokumente). Nach dem Zerlegen wandert sie innerhalb von
SplitPath in das Unterverzeichnis Erfolgreich bzw. bei einem Fehler nach Fehler
(dieselben Parameter SuccessFolder/ErrorFolder wie beim Import). Welche Dateien als Sammel-Dokument
aufgegriffen werden, entscheiden dieselben Dateifilter wie beim regulären Import — der globale
FileFilter und die Filter der Objekttypen.
Trennstrategien
| Strategie | Funktionsweise |
|---|---|
Barcode |
Eine Seite mit erkennbarem Barcode/QR-Code beginnt ein neues Dokument. Der dekodierte Wert ist der Identifier. Folgeseiten ohne Barcode gehören zum vorherigen Dokument. Die Erkennung läuft zweistufig: erst auf dem Rohbild, bei Fehlschlag auf dem vorverarbeiteten Bild (Graustufen → Weichzeichner → Schwellwert), damit gerasterte Balken realer Scans lesbar werden. |
Ocr |
PaddleOCR erkennt den Seitentext; eine konfigurierte Regex trifft den Dokumentstart und liefert den Identifier über eine benannte Gruppe (nummer, belegkey, belegnummer) oder Gruppe 1. |
Wichtig: Seiten, die vor dem ersten erkannten Dokumentstart liegen (kein Barcode/Treffer), führen dazu, dass die gesamte Sammel-PDF in den Fehler-Ordner verschoben wird.
Barcode-Erkennung: Symbologien, Vorverarbeitung, Identifier-Muster
Die Barcode-Erkennung kommt aus der Bibliothek Meso.Dokument.Split (privater GitHub-Feed), die auch das
MESO WebArchiv nutzt. Drei Einstellungen entscheiden über die Trefferqualität:
Split:Barcode:Symbologien— die erwartete Symbologie immer explizit setzen (z.B.["CODE_39"]). Eine leere Liste bedeutet nicht mehr „alle Formate“, sondern die Standardauswahl der Bibliothek (QR_CODE, DATA_MATRIX, AZTEC, PDF_417, CODE_128, CODE_39, CODE_93, EAN_13, EAN_8, UPC_A, UPC_E). Prüfsummenfreie 1D-Formate (ITF,CODABAR,RSS_14,RSS_EXPANDED,MSI,PLESSEY,PHARMA_CODE,IMB,MAXICODE,UPC_EAN_EXTENSION) fehlen dort bewusst: Sie lasen auf gescannten Belegen Tabellenlinien und Rasterflächen als Barcode und erzeugten so still Dokumente mit erfundenen Belegnummern. Wer eines dieser Formate braucht, trägt es explizit ein. Bei leerer Liste warnt der Dienst beim Start. Eine engere Liste ist zusätzlich ein Hebel für den Durchsatz: Je weniger Formate geprüft werden, desto schneller ist eine barcodefreie Seite erkannt — die Erkennung läuft pro Seite ohne Treffer zweimal (Rohbild, dann vorverarbeitetes Bild), jeweils über alle konfigurierten Formate.Split:Barcode:Vorverarbeitung— standardmäßig aktiv. Gerasterte (Halbton-)Balken bei 200 dpi werden ohne Vorverarbeitung gar nicht gelesen; Weichzeichner (Sigma 2,0) und Schwellwert (150) machen sie lesbar. Die Werte stammen aus der Messung an realen Scans.RenderDpiliegt deshalb jetzt bei 300 (vorher 200); für schwierige Scans wurden 400 dpi gemessen. Bei stark gerasterten Balken löscht der Weichzeichner Module aus, die im gerenderten Bild schmaler als etwa 8 Pixel sind — deshalb höher rendern (300–400 dpi) statt Sigma oder Schwellwert abzusenken.Split:Barcode:IdentifierRegex— optionales Muster für plausible Identifier (z.B.^\d{8}$für achtstellige Lieferscheinnummern). Ein Barcode ohne Treffer wird verworfen und protokolliert; die Seite gilt als Folgeseite. Enthält das Muster Gruppen (nummer,belegkey,belegnummeroder Gruppe 1), wird der Teilwert zum Identifier.
Die Laufzeit der Erkennung steht je Datei im Log (Erkennung abgeschlossen: … Seite(n) in … ms); die
Vorverarbeitung kostet nur dort Zeit, wo das Rohbild keinen Treffer liefert.
Lässt sich die Strategie aus der Konfiguration nicht aufbauen (z.B. ein ungültiges Split:Barcode:IdentifierRegex
nach einem Hot-Reload), wird das als Fehler protokolliert, die Datei bleibt unangetastet und wird beim
nächsten Lauf erneut versucht; der Validator fängt einen solchen Fehler beim Start normalerweise bereits ab.
Verhalten im Demomodus
Erkannte Segmente werden protokolliert ([DEMO]), aber es werden keine Einzeldateien geschrieben und die Sammel-PDF wird nicht verschoben.
Keine Kommentare vorhanden
Keine Kommentare vorhanden