Skip to main content

Barcodetrennung

In folgendem Ordner der Squeeze Installation: SQUEEZE\htdocs\repository\<Mandantenname>\UserExits\Global\

muss die PHP-Datei BarcodeSeparation.php liegen.

Unter Barcode Types sind die möglichen Barcode-Typen aufgeführt die verwendet werden können.

In diesem Beispiel: CODE_128

Darüber hinaus kann der zu berücksichtigende Barcode-Wert weiter eingeschränkt werden:

In diesem Beispiel muss der Barcode 12 Stellen haben und die ersten 4 Stellen müssen "DTER" entsprechen.

<?php

use Squeeze\xDataBaseClass;
use Squeeze\xDoc;
use Squeeze\xReturnObject;

/**
 * @param xDoc $xDoc
 * @return xReturnObject
 * @throws Exception
 */
function BarcodeSeparation(xDoc $xDoc, string $nextStep, string $newStatus): xReturnObject
{
    $logger = Logger::getLogger("main");
    $db = xDataBaseClass::getDBConnection();

    $logger->debug('BatchClassId    = ' . $xDoc->batchClassId);
    $logger->debug('DocumentClassId = ' . $xDoc->docClassId);

    if ($xDoc->batchClassId == '1') {
        $result = splitByBarcode($db, $xDoc, $logger);
    }

    return $result;
}

/**
 * @param PDO $db
 * @param xDoc $xDoc
 * @param Logger $logger
 * @return xReturnObject
 * @throws Exception
 */
function splitByBarcode(PDO $db, xDoc $xDoc, Logger $logger): xReturnObject
{
    // ==========================================
    // Barcode Types
    // ==========================================
    //  AZTEC
    //  CODABAR
    //  CODE_39
    //  CODE_93
    //  CODE_128
    //  COMPOSITE
    //  DATABAR
    //  DATA_MATRIX
    //  DATABAR_EXP
    //  EAN_2
    //  EAN_5
    //  EAN_8
    //  EAN_13
    //  ITF
    //  ISBN_10
    //  ISBN_13
    //  MAXICODE
    //  PDF_417
    //  QR_CODE
    //  RSS_14
    //  RSS_EXPANDED
    //  UPC_A
    //  UPC_E
    //  UPC_EAN_EXTENSION
    //  UNKNOWN

    $currentSplit = 0;
    $splits = [];

    // Define which field values to keep
    if ($xDoc->getDocumentFieldByName('ScanUser') !== null) {
        $keepFieldValues[] = ['name' => 'ScanUser', 'value' => $xDoc->getDocumentFieldByName('ScanUser')->getValue()->value];
    }
    if ($xDoc->getDocumentFieldByName('ScanUser') !== null) {
        $keepFieldValues[] = ['name' => 'DocumentType', 'value' => $xDoc->getDocumentFieldByName('DocumentType')->getValue()->value];
    }

    foreach ($xDoc->barcodes as $page => $barcodes) {
        $barcodeType = '';
        $barcodeValue = '';
        $suppressOCR = 0;
        $logger->debug('Checking Barcodes for Page ' . $page);

        if (count($barcodes) == 0) {
            $logger->debug('No Barcode on Page ' . $page);
            if ($page == 1) {
                $currentSplit = $page;
            }
        } else {
            foreach ($barcodes as $key => $barcode) {

                // Suppress OCR if Zero Barcode was found
                //if($barcode['type'] == 'ITF' && $barcode['value'] == '999999'){
                //    $suppressOCR = 1;
                //}

                //$logger->debug($barcode['type']);
                //$logger->debug(substr($barcode['value'], 0, 3));
				
                if ($barcode['type'] == 'CODE_128' && mb_strlen($barcode['value']) == 12 && substr($barcode['value'], 0, 4) == 'DTER') {
                    $logger->debug('Start Split here! Barcode (' . $barcode['value'] . ') of type (' . $barcode['type'] . ') found on page ' . $page);
                    $currentSplit = $page;
                    $barcodeType = $barcode['type'];
                    $barcodeValue = $barcode['value'];
                }
				//elseif($barcode['type'] == 'ITF' && mb_strlen($barcode['value']) == 8 && substr($barcode['value'], 0, 1) == '4'){
                //    $logger->debug('Start Split here! Barcode (' . $barcode['value'] . ') of type (' . $barcode['type'] . ') found on page '. $page);
                //    $currentSplit = $page;
                //    $barcodeType = $barcode['type'];
                //    $barcodeValue = $barcode['value'];
                //}
            }
        }

        // add page
        $splits[$currentSplit][] = ['page' => $page, 'type' => $barcodeType, 'value' => $barcodeValue, 'fields' => $keepFieldValues, 'suppressOcr' => $suppressOCR];
    }

    return new xReturnObject(true, 200, 'Barcode Split', $splits);
}

Ob die Trennung funktioniert, sieht man wenn in der Bildaufbereitung aus einem Dokument mehrere werden und im Squeeze.log. 

Die oben aufgeführten Barcode Typen sind auch die möglichen Werte für Attachment Barcode Typen an der Dokumentenklasse. Wichtig: Der Wert für den Barcode Typ ist case-sensitiv (Groß-Kleinschreibung beachten!).

Ob die Erkennung des Attachment Barcodes funktioniert hat, sieht man daran das ab diesem Barcode kein Text mehr im Viewer markiert werden kann.