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);
}
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]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;
}[/code]
neue:
[code]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);
}[/code]