Direkt zum Hauptinhalt

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. RenderDpi liegt 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, belegnummer oder 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.