コメントに記載されているように、組み込みデバイスでUTF-8アラビア語のテキストを正しく表示することは簡単なことではありません。テキストの方向、結合、文字のエンコーディングを処理する必要があります。
これまで私が保守していたPHP ESC/POS driverの試みがありましたが、ネイティブESC/POSでアラビア文字に参加できませんでした。しかし、代わりに画像を印刷したthis workaround(PHP)に解決しました。
これを回避作業の基本的な手順は以下のとおりです。
- はアラビア語フォント、テキストライブラリ、画像ライブラリ
- は(「リシェイプ」)に参加ゲット文字
- はUTF-を変換しますLTR(印刷)ために8、右
- 印刷画像整列
- スラップそれを画像上で、双方向テキストレイアウトアルゴリズムを用い
これをPythonに移植するには、Wandを使用してthis answerに貸し出しました。 Python Image Library(PIL)は分音記号を別の文字として表示していたため、出力が不適切でした。
依存関係はコメントに記載されています。
#!/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()
このスクリプトを実行するとPNGが出力され、「/ dev/usb/lp0」のプリンタに出力されます。
これは、スタンドアロンpython-escposデモですが、私はOdooアライメントと画像出力のためのようなコマンドを持っていることを前提としています。
免責事項:アラビア語を少しでも発音したり書くことはできません。正しいとは確信できません。私はちょうど視覚的にGoogleが翻訳したものにプリントアウトを比較しています。
私はあなたのアラビア語のテキストが左から右へではなく、右から左に表示されるようになっていると思いたいです。プリンタが左から右のテキストのみを処理できる場合は、必要に応じて文字の並び順を逆にするために、エンコーディング変換コードを編集する必要があります。私は、テキストの方向が変わるときを教えてくれる特別なUnicode文字があると思いますが、答えがどのように機能するかを説明するのに十分な情報がありません。 – Blckknght
「アラビア文字を正しく印刷する」は、UTF8からプリンタの文字セットに変換するだけではありません。あなたが見てきたように(1:「反転」)、テキストは右から左に表示される必要がありますが、コードは左から右の順番で(ほとんどの場合)送信されます。しかし、ソフトウェアはそれを簡単に修正することができます。 Alas、(2: "disconnected")は、最初、内側、および最終結合文字を正しく計算するのが少し難しくなります。 – usr2564301
(興味のある人のために:アラビア語の手紙は適切な言葉を形成するために参加する必要があります現在ラドワンは 'TEXTLIKETHIS'の類推ですが、それも間違った順序であるので、' SIHTEKILEROM') – usr2564301