Wie in den Kommentaren erwähnt, ist es keine triviale Aufgabe, UTF-8 arabischen Text korrekt auf einem eingebetteten Gerät anzuzeigen. Sie müssen mit Textrichtung, Verknüpfung und Zeichencodierung umgehen.
Ich hatte einen Versuch in der Vergangenheit für eine PHP ESC/POS driver, die ich pflege, und konnte nicht arabische Zeichen in nativen ESC/POS verbunden werden. Allerdings habe ich am Ende auf this workaround (PHP) setzen, die stattdessen Bilder gedruckt.
Die grundlegenden Schritte, um dieses arbeiten, sind:
- eine arabische Schrift holen einige Textbibliotheken und eine Bildbibliothek
- Join ('reshape') die Zeichen
- umrechnen UTF- 8 bis LTR (print), um, den bidirektionalen Textlayout-Algorithmus
- Slap es auf einem Bild der rechten
- Drucke das Bild ausgerichtet
Um dies auf Python zu portieren, lieh ich this answer mit Wand. Die Python Image Library (PIL) zeigte Diakritika als separate Zeichen an, wodurch die Ausgabe ungeeignet wurde.
Die Abhängigkeiten sind in den Kommentaren aufgeführt.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Print an Arabic string to a printer.
# Based on example from escpos-php
# Dependencies-
# - pip install wand python-bidi python-escpos
# - sudo apt-get install fonts-hosny-thabit
# - download arabic_reshaper and place in arabic_reshaper/ subfolder
import arabic_reshaper
from escpos import printer
from bidi.algorithm import get_display
from wand.image import Image as wImage
from wand.drawing import Drawing as wDrawing
from wand.color import Color as wColor
# Some variables
fontPath = "/usr/share/fonts/opentype/fonts-hosny-thabit/Thabit.ttf"
textUtf8 = u"بعض النصوص من جوجل ترجمة"
tmpImage = 'my-text.png'
printFile = "/dev/usb/lp0"
printWidth = 550
# Get the characters in order
textReshaped = arabic_reshaper.reshape(textUtf8)
textDisplay = get_display(textReshaped)
# PIL can't do this correctly, need to use 'wand'.
# Based on
# https://stackoverflow.com/questions/5732408/printing-bidi-text-to-an-image
im = wImage(width=printWidth, height=36, background=wColor('#ffffff'))
draw = wDrawing()
draw.text_alignment = 'right';
draw.text_antialias = False
draw.text_encoding = 'utf-8'
draw.text_kerning = 0.0
draw.font = fontPath
draw.font_size = 36
draw.text(printWidth, 22, textDisplay)
draw(im)
im.save(filename=tmpImage)
# Print an image with your printer library
printer = printer.File(printFile)
printer.set(align="right")
printer.image(tmpImage)
printer.cut()
das Skript ausführen gibt Ihnen eine PNG, und druckt das gleiche an einen Drucker an "/ dev/usb/lp0".

Dies ist eine eigenständige python-escpos Demo, aber ich gehe davon aus, dass Odoo ähnliche Befehle für die Ausrichtung und Bildausgabe hat.
Haftungsausschluss: Ich spreche oder schreibe Arabisch nicht einmal ein bisschen, also kann ich nicht sicher sein, dass das korrekt ist. Ich vergleiche den Ausdruck nur optisch mit dem, was Google Translate mir gegeben hat.

Ich schätze Ihr arabischer Text soll von rechts angezeigt werden, nach links statt nach rechts nach links. Wenn der Drucker nur Text von links nach rechts verarbeiten kann, müssen Sie möglicherweise den Kodierungskonvertierungscode bearbeiten, um die Zeichenreihenfolge bei Bedarf auch umzukehren. Ich denke, es gibt spezielle Unicode-Zeichen, die dir sagen, wenn sich die Richtung des Textes ändert, aber ich bin nicht gut genug informiert über die Details, um zu beschreiben, wie es in einer Antwort funktioniert. – Blckknght
"Arabischen Text korrekt drucken" konvertiert * nicht * nur von UTF8 in den Zeichensatz Ihres Druckers.Wie Sie gesehen haben (1: "reversed") muss der Text von rechts nach links erscheinen, während die Codes (höchstwahrscheinlich) in der Reihenfolge von links nach rechts gesendet werden. Aber Software kann das trivial beheben. Ach, (2: "getrennt") berechnet die Anfangs-, Medial- und Endverbindungsfiguren etwas schwieriger. – usr2564301
(Für interessierte lurkers: Arabische Buchstaben müssen sich verbinden, um richtige Wörter zu bilden. Was Radwan jetzt sieht, ist das Analog von 'TEXTLIKETHIS'. Und es ist auch in der falschen Reihenfolge, so' SIHTEKILEROM'.) – usr2564301