Kassenbon darstellung

Antwort erstellen

Bestätigungscode
Gib den Code genau so ein, wie du ihn siehst; Groß- und Kleinschreibung wird nicht unterschieden.
Smileys
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :arrow: :| :mrgreen: :geek: :ugeek:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[url] ist eingeschaltet
Smileys sind eingeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Kassenbon darstellung

Kassenbon darstellung

von brankor » Fr 12. Dez 2025, 12:26

Hallo, ich nutze Version 2.9.1. Beim Kassenbondruck werden – falls die Artikelbeschreibung länger als 22 Zeichen ist – der Bruttopreis und die Gesamtsumme nach links verschoben. Ich habe dafür einen Workaround gefunden und möchte ihn gerne teilen.
In /php/utilities/layouter.php
Funktion render() alt:

Code: Alles auswählen

public function render($varcontent, $just, $label, $varstyle, $useColonAfterLabel) {
    $endOfLabel = "";
    if ($useColonAfterLabel) {
        $endOfLabel = ":";
    }
    if (is_null($varcontent)) {
        $text = $label;
    } else {
        $text = $varcontent;
        if ($label != "") {
            $text = $label.$endOfLabel.$varcontent;
        }
    }
    $textInCp437 = self::asciiEncodeStringTo437($text);
    $contentLength = 0;
    $factor = 1;
    if (($varstyle == self::$NORMAL) || ($varstyle == self::$HIGH)) {
        $contentLength = strlen($textInCp437);
        $factor = 1;
    } else if ($varstyle == self::$WIDE) {
        $contentLength = strlen($textInCp437) * 2;
        $factor = 2;
    } else if ($varstyle == self::$WIDEHIGH) {
        $contentLength = strlen($textInCp437) * 2;
        $factor = 2;
    }

    if ($just == ColProperty::$COMPLETE) {
        if ($contentLength > $this->length) {
            $textLines = array();
            $remaingText = $text;
            while (strlen($remaingText) > 0) {
                $textToSplit = $remaingText;
                $maxLength = strlen($textToSplit) * $factor;
                $cutLength = min($maxLength, $this->length / $factor);
                $textLines[] = substr($textToSplit, 0, $cutLength);
                $remaingText = substr($textToSplit, $cutLength);
            }
            $text = implode("\n", $textLines);
        }
        return $this->textOutDueToFont(0, $text, 0, $varstyle);
    }
    $textlen = $contentLength;
    if ($contentLength > $this->length) {
        $text = substr($text, 0, $this->length / $factor);
        $textlen = $this->length;
    }

    $freeSpace = $this->length - $textlen;

    $fillstart = 0;
    $fillend = $freeSpace;
    if ($just == self::$RIGHT) {
        $fillstart = intval($freeSpace);
        $fillend = 0;
    } else if ($just == self::$CENTER) {
        $fillstart = intval($freeSpace / 2);
        $fillend = $freeSpace - $fillstart;
    }
    $out = $this->textOutDueToFont($fillstart, $text, $fillend, $varstyle);

    return $out;
}
neue:

Code: Alles auswählen

public function render($varcontent, $just, $label, $varstyle, $useColonAfterLabel) {
    $endOfLabel = $useColonAfterLabel ? ":" : "";

    if (is_null($varcontent)) {
        $text = $label;
    } else {
        $text = ($label != "") ? ($label.$endOfLabel.$varcontent) : $varcontent;
    }

    $text = rtrim($text);

    // helper: entfernt ESC t n (Codepage-Umschaltung) aus der Längenberechnung
    $stripEsc = function ($s) {
        return preg_replace('/\x1Bt./s', '', $s);
    };

    $factor = 1;
    if (($varstyle == self::$WIDE) || ($varstyle == self::$WIDEHIGH))
        $factor = 2;

    //Länge für das Layout (basierend auf dem kodierten String)
    $encoded = self::asciiEncodeStringTo437($text);
    $contentLength = strlen($stripEsc($encoded)) * $factor;

    if ($just == ColProperty::$COMPLETE) {
        return $this->textOutDueToFont(0, $text, 0, $varstyle);
    }

    //TRUNCATE: Text kürzen und danach UNBEDINGT die tatsächliche Länge neu berechnen
    $textlen = $contentLength;
    if ($contentLength > $this->length) {
        $maxChars = intdiv($this->length, $factor);

        if (function_exists('mb_substr')) {
            $text = mb_substr($text, 0, $maxChars, 'UTF-8');
        } else {
            $text = substr($text, 0, $maxChars);
        }

        $encoded2 = self::asciiEncodeStringTo437($text);
        $textlen = strlen($stripEsc($encoded2)) * $factor;

        if ($textlen > $this->length)
            $textlen = $this->length; // safety
    }

    $freeSpace = $this->length - $textlen;
    if ($freeSpace < 0)
        $freeSpace = 0;

    $fillstart = 0;
    $fillend = $freeSpace;

    if ($just == self::$RIGHT) {
        $fillstart = intval($freeSpace);
        $fillend = 0;
    } else if ($just == self::$CENTER) {
        $fillstart = intval($freeSpace / 2);
        $fillend = $freeSpace - $fillstart;
    }

    return $this->textOutDueToFont($fillstart, $text, $fillend, $varstyle);
}

Nach oben