2.0.9: Produkte mit Sonderzeichen (Ticks, Backticks, etc.) werden nicht auf den Bons gedruckt

In diesem Forum können Fragen zum OrderSprinter gestellt werden.
bombjack
Beiträge: 5
Registriert: Mi 30. Sep 2020, 20:42

2.0.9: Produkte mit Sonderzeichen (Ticks, Backticks, etc.) werden nicht auf den Bons gedruckt

Beitrag von bombjack »

Hallo Stephan,

ich habe festgestellt, daß einige Produktnamen seit dem Update auf 2.x nicht mehr ausgedruckt werden.
Nach Prüfung der Namen stellte sich heraus, daß Ticks, Backticks und bestimmte Apostrophe (die eigentlich gar keine sind) dafür verantwortlich waren.
Ich meine solche Zeichen:

Code: Alles auswählen

´  `  ‘
Nach Entfernen der Zeichen funktioniert es wieder.
In 1.x lief es aber auch so.

Ich vermute mal, daß die Zeichenketten da nicht escaped werden und es deswegen zu der Fehlfunktion kommt.

Beste Grüße
Björn
os_user

Re: 2.0.9: Produkte mit Sonderzeichen (Ticks, Backticks, etc.) werden nicht auf den Bons gedruckt

Beitrag von os_user »

Hallo,
ich meine mich zu erinnern, dass mit dem Update auf Version 2 auch bei größer/kleiner-Zeichen dieses Problem aufgetreten ist. Wahrscheinlich könnte die gleiche Ursache dahinterstecken.
pichel
Administrator
Beiträge: 731
Registriert: So 13. Sep 2015, 19:48
Wohnort: Hamburg
Kontaktdaten:

Re: 2.0.9: Produkte mit Sonderzeichen (Ticks, Backticks, etc.) werden nicht auf den Bons gedruckt

Beitrag von pichel »

Hallo,

in den 1.x Versionen wurden die Inhalte der Variablen jeweils im Druckerserver ausgewertet, ab 2.x macht das nun der Webserver (Datei layouter.php). Ich habe mir das notiert und werde es mir demnächst anschauen. Für jetzt bleibt dann wohl nur der Workaround, die Artikel ohne diese Problemzeichen zu benennen.

Gruß,

Stefan
Stefan Pichel
Entwickler der Kassensoftware OrderSprinter (http://www.ordersprinter.de)
CafeCafe
Beiträge: 28
Registriert: Sa 14. Apr 2018, 14:04

Re: 2.0.9: Produkte mit Sonderzeichen (Ticks, Backticks, etc.) werden nicht auf den Bons gedruckt

Beitrag von CafeCafe »

Ergänzung: "€" und "â" gehen auch nicht.
pichel
Administrator
Beiträge: 731
Registriert: So 13. Sep 2015, 19:48
Wohnort: Hamburg
Kontaktdaten:

Re: 2.0.9: Produkte mit Sonderzeichen (Ticks, Backticks, etc.) werden nicht auf den Bons gedruckt

Beitrag von pichel »

Tja, ich habe noch keine Zeit gehabt, mich darum zu kümmern. Aber um Weihnachten herum werde ich bestimmt ein wenig Zeit finden...
Stefan Pichel
Entwickler der Kassensoftware OrderSprinter (http://www.ordersprinter.de)
aporsol
Beiträge: 5
Registriert: Fr 28. Feb 2020, 17:49

Re: 2.0.9: Produkte mit Sonderzeichen (Ticks, Backticks, etc.) werden nicht auf den Bons gedruckt

Beitrag von aporsol »

Hallo,

das erste Problem ist das Regex in der php/utilities/layouter.php in der Funktion getParts Zeile 568:

Code: Alles auswählen

preg_match_all('/\{[a-zA-Z0-9éöäüÖÄÜß_\'":\-=\+%\.,\/\(\) ]*\}/', $line, $matches); 
Hier werden nicht alle möglichen Zeichen zugelassen.
Ersetzt mit:

Code: Alles auswählen

preg_match_all('/\{[a-zA-Z0-9â`<>éöäüÖÄÜß_\'":\-=\+%\.,\/\(\) ]*\}/', $line, $matches); 
werden die Zeichen <> ` â gedruckt.

Du kannst andere fehlenden Zeichen hinzufügen und hier https://de.functions-online.com/preg_match_all.html testen,
ob das Regex es funktioniert.

Das zweite Problem ist, dass die Zeichen: € ´ ‘ nicht in der Codepage 437 sind.
So wie es aktuell ist müssen die Zeichen in ASCII oder der Codepage 437 enthalten sein, sonst wird es nicht gedruckt.
Wenn du Zeichen der Codepage 858 und keine der 437 kann man das ändern.
pichel
Administrator
Beiträge: 731
Registriert: So 13. Sep 2015, 19:48
Wohnort: Hamburg
Kontaktdaten:

Re: 2.0.9: Produkte mit Sonderzeichen (Ticks, Backticks, etc.) werden nicht auf den Bons gedruckt

Beitrag von pichel »

Hallo Apersol,

vielen Dank für deinen Beitrag mit der Lösung. Stimmt, da habe ich wohl etwas geschludert beim Zusammenbasteln der Regex. Wahrscheinlich sollte ich mir auch die anderen Regex-Ausdrücke im Code anschauen...

@Anwender: Nur zur Info.. Ich werde eine neue Version mit einem Bugfix für dieses Problem aus zeitlichen Gründen vermutlich nicht vor Weihnachten bereitstellen.

Gruß,

Stefan
Stefan Pichel
Entwickler der Kassensoftware OrderSprinter (http://www.ordersprinter.de)
aporsol
Beiträge: 5
Registriert: Fr 28. Feb 2020, 17:49

Re: 2.0.9: Produkte mit Sonderzeichen (Ticks, Backticks, etc.) werden nicht auf den Bons gedruckt

Beitrag von aporsol »

Hallo,

in der Version 2.0.13 hast du das Regex Problem gelöst, aber noch nicht das mit der Codepage.
Das € Zeichen ist nur in CP858 enthalten, es wir aber nur CP437 benutzt.
Deshalb wird nichts von der Funktion asciiEncodeStringTo437 zurückgegeben.
Mit folgender Änderung können auch Zeichen aus CP858 gedruckt werden, solange nur Zeichen davon enthalten sind.

Code: Alles auswählen

private static function asciiEncodeStringTo437($string)
{
	$sourceEncoding = self::detect_encoding($string);
	$destinationEncoding = 'CP437'; // Extended ASCII - Codepage 437
	$stringout = iconv($sourceEncoding, $destinationEncoding, $string);
	if ($stringout == false) {
		$destinationEncoding = 'CP858';
		$stringout = iconv($sourceEncoding, $destinationEncoding, $string);
		if ($stringout != false) {
			$stringout = "\et\x13" . $stringout . "\et\0"; //activate Codepage 858 (No. 19(\x13)) then reset to Codepage 437 (No. 0(\0)) epson esc/pos codes
		}
	}
	return $stringout;
}
Ist es notwendig alles vorher in ESC/Pos umzuwandeln oder kann das nicht der Druckertreiber übernehmen?
pichel
Administrator
Beiträge: 731
Registriert: So 13. Sep 2015, 19:48
Wohnort: Hamburg
Kontaktdaten:

Re: 2.0.9: Produkte mit Sonderzeichen (Ticks, Backticks, etc.) werden nicht auf den Bons gedruckt

Beitrag von pichel »

Hi,

danke für den Code-Snippet. Ich baue es für die nächste Version gerne ein.

Zu der Frage, ob das nicht der Druckerserver übernehmen kann. Prinzipiell geht das natürlich und so war es auch bis zur Version 1.0. Aber das bedeutet, dass ich bei Änderungen immer sowohl den Javaprinter als auch den Windows-Printserver anpassen und bauen musste. Je weniger "Intelligenz" die Druckerserver haben, desto seltener ist es auch für den Anwender notwendig, dass er diesen bei einem Versionsupdate updaten muss.

Irgendwann werde ich es auch einbauen, dass nach einem Update die Mitteilung kommt, welche Komponenten auch aktualisiert werden müssen. Im Moment gibt es da ja nur eine statische ganz allgemeine Meldung.

Gruß,

Stefan
Stefan Pichel
Entwickler der Kassensoftware OrderSprinter (http://www.ordersprinter.de)
aporsol
Beiträge: 5
Registriert: Fr 28. Feb 2020, 17:49

Re: 2.0.9: Produkte mit Sonderzeichen (Ticks, Backticks, etc.) werden nicht auf den Bons gedruckt

Beitrag von aporsol »

Ah okay, das ergibt natürlich Sinn.

Code: Alles auswählen

$destinationEncoding = 'CP858//IGNORE//TRANSLIT';
statt
$destinationEncoding = 'CP858';
Damit wird versucht unbekannte Zeichen durch enthaltene zu ersetzen, wenn das nicht geht werden sie einfach weggelassen.

Die Befehle {RAWH:41} und {RAWD:65} scheinen auch nicht zu funktionieren.
Mit linehascontent = true in Zeile 427 und 434 geht es.

Code: Alles auswählen

else if (self::startsWith($elemContent, "RAWD")) {
  $vals = self::getCommaSeparatedValuesOfElem($elemContent);
  return array("bytes" => $vals,"html" => "", "linehascontent" => false,"typeofentry" => "bytes");
}

Code: Alles auswählen

else if (self::startsWith($elemContent, "RAWD")) {
  $vals = self::getCommaSeparatedValuesOfElem($elemContent);
  return array("bytes" => $vals,"html" => "", "linehascontent" => true,"typeofentry" => "bytes");
}
Antworten