Closed kajornsakp closed 9 years ago
Native ESC/POS Thai output is not implemented in this driver. There does not appear to be any way to convert UTF-8 input to a printer-supported code-page with the iconv
library (which escpos-php uses). This is a similar issue to Chinese #37 and Arabic #6 support- Basically, the output is more complex than western languages, so without being able to understand the script or drop in a converter, I'm not likely to add this (pull requests welcome, ImagePrintBuffer
is where it's at).
The workaround will involve installing a freely licensed TTF font, then rendering the output with the ImagePrintBuffer
. This produces tiny images on the computer, then prints them instead of requesting text. The downside is speed and loss of access to formatting commands, but full UTF-8 is supported in theory (as far as ImageMagick supports it, anyway). #31 also applies here.
I will write a general FAQ for working around this encoding stuff, and include a Thai example next week. (no longer necessary, see below)
Can you respond back and let me know if the current test string is suitable?
"Thai" => "นายสังฆภัณฑ์ เฮงพิทักษ์ฝั่ง ผู้เฒ่าซึ่งมีอาชีพเป็นฅนขายฃวด ถูกตำรวจปฏิบัติการจับฟ้องศาล ฐานลักนาฬิกาคุณหญิงฉัตรชฎา ฌานสมาธิ\n",
(this is from character-encoding-test-strings.inc, used in the examples)
I've tried something and it's work . In DefaultCapabilityProfile.php at array index 21 (Thai Character Code 11). I replaced false with CodePage::CP874 and somehow it's working
This is simple to add if you think it will help other writers of the Thai language. With this change, the character encoding test appears as-
(This is from character-encoding.php
)
I'm not sure whether is this correct. Can you comment on-
Suitability - This string can be used very well for printing test
Output - The output should be like this
(From character-encoding.php)
Glad to see the output works on your TM-T88V.
I'll put this down to printer differences (my example was printed on a TM-T20).
Hi, i was just wondering if there's any solution to fix the thai printout @mike42 has shown - the vowels are displaced to the right instead of the top. @kajornsakp , was there something u did to correct the character alignment? I was able to print using the windows printer driver with correct output. so im guessing the issue isnt the printer's limitations?
kajornsakp ทำยังไงถึงออกทั้งสระบน/ล่าง/การันต์ แบบนี้ครับ ผมทดลองแล้วมันยังอยู่บรรทัดเดียวกันอยู่เลย เพิ่ม Codepage::CP874 แล้วก็ยังไม่ได้
@nobutsta ของผมใช้กับ epson TM-T88V พอเพิ่ม Codepage::CP874 เข้าไปก็พิมพ์ออกมาได้นะครับ ถ้าเป็นรุ่นอื่นๆ อาจจะต้องใช้ codepage ที่ support กับ printer รุ่นนั้นๆอะครับ
ผมซื้อของจีนมาใช้ ปวดหัวเลยครับ สรุปว่าต้องเขียน 3 บรรทัด สระลอย, อักษร, สระจม กระดาษเกือบหมดม้วนกว่าจะพิมพ์ให้อ่านออก /ขอบคุณครับ
@nobutsta พอจะให้ตัวอย่างการชดเชย สระได้ไหมครับ พอดีใช้เครื่องจากจีนเหมือนกัน
@net1 ผมใช้วิธีเว้นวรรคสระและวรรณยุกต์ให้ตรงกับอักษรในบรรทัดต่อไปแทนครับ เช่น จะพิมพ์คำว่า "ดี" บรรทัดแรกผมก็พิมพ์ "สระอี" แล้วก็สั่งให้โปรแกรมเว้นบรรทัด บรรทัดต่อมาก็พิมพ์ "ด" ให้อยู่ใต้ "สระอี" พอดี ทำแบบนี้เสียกระดาษและเวลาหน่อย แต่เป็นวิธีเดียวที่ใช้ได้กับเครื่องจีนครับ
ผมซื่อ xprinter มา รุ่น xp-58iil ตอนนี้ลองมา 10 วันแล้ว ยังไม่ได้ภาษาไทยเลยครับ ได้แตาภาษาต่างดาว $connector = new WindowsPrintConnector("XP-58_2"); $profile = DefaultCapabilityProfile::getInstance(); $printer = new Printer($connector, $profile); $printer -> initialize();//reset format / Print a "Hello world" receipt" / //$printer = new Printer($connector);
//setFont($font)
$printer -> text(iconv( "UTF-8" ,"TIS-620","สวัสดี!\n"));
$printer -> text(iconv( "UTF-8" ,"TIS-620","สวัสดี!\n"));
$printer -> text(iconv( "UTF-8" ,"TIS-620","สวัสดี!\n"));
$printer -> text(iconv( "UTF-8" ,"TIS-620","สวัสดี!\n"));
$printer -> text(iconv( "UTF-8" ,"TIS-620","สวัสดี!\n"));
$printer -> text(iconv( "UTF-8" ,"TIS-620","สวัสดี!\n"));
$printer -> text(iconv( "UTF-8" ,"TIS-620","สวัสดี!\n"));
$printer -> text("helo\n");
$printer -> cut();
อยากลอง เพิ่ม Codepage::CP874 สามารถเข้าไปเพิ่มตรงไฟล์ใหนครับ
XPrinter V3.0C.pdf ผมลอง เซตโปรแกรมที่มากับแผ่นซีดี เซต codepage เป็น 255 ตอนนี้ลองปรินดู ภาษาไทยปรินออกแล้วครับ แต่สระต่างๆ ไม่เรียง มันเป็นแบบ "ด ี มด ี มด ี มด ี มด ี มด ี มด ี มด ี มด ี ม"
ตอนนี้ปรินส์ภาษไทยออก เลยเดาต่อว่า เครื่อง ปรินสลิปที่ควรซื้อ ต้องซื้อแบบที่มี codepage เป็นภาษาไทยด้วย
ไฟล์ที่แนบมา เป็นการเซต codepage ให้เป็นภาษาไทยในเครื่อง ใช้โปรแกรม XPrinter.V3.0C เซ็ตเครื่อง
ตอนนี้ผม set codepage แล้วการแสดงภาษาไทยก็ยังไม่สมบูรณ์ ผมเดาว่าเป็นเพราะตัวเครื่อง ผมน่าจะไปซื้อเครื่องใหม่ ใช่หรือไม่ครับ เครื่อง xprinter รุ่น xp-58iil ควรคืนร้านเขาไป
@nobutsta มีตัวอย่าง code ทำสระลอย และสระจม หรือเปล่าคับ
ผมใช้เทคนิค save เป็นภาพแล้วก็ไปดึงภาพให้ปริ้นออกมาจะง่ายกว่ามากครับไม่ต้องมานั่งปวดหัวเรื่องปริ้นแล้วสระลอย
ทักพี่ๆทุกคน ผมติดปัญหาเรื่อง lineheight รู้สึกว่ามัน ห่างเกินไป พอจะมีวิธีที่ทำให้ความห่างลดลงหน่อยไหมครับ ผมใช้ xprinter 58 series ครับ ขอบคุณครับ
if you use xp-58 you can use iconv convert string
EXP: $printer -> text(iconv("UTF-8", "TIS-620", "ศรีรัตนะคอมพิวเตอร์\n"));
it work for me.
ปริ้นภาษาไทยไม่ได้ครับ เครื่อง Xprinter N160III ท่านใดทำได้แล้ว แนะนำหน่อยครับ
Xprinter-X810 สระไม่ลอยครับ แต่มันเรียงต่อกัน
ผมใช้เทคนิค save เป็นภาพแล้วก็ไปดึงภาพให้ปริ้นออกมาจะง่ายกว่ามากครับไม่ต้องมานั่งปวดหัวเรื่องปริ้นแล้วสระลอย
ผมเองก็ใช้เทคนิคนี้ แต่มีปัญหาเรื่องพิมพ์แล้วกระตุกและช้า รวมถึงมีเสียงดังด้วยครับ ไม่ทราบของคุณมีปัญหานี้ไหมครับ
I have some problems about Thai characters printing in Epson TM-T88V . I found that there is no codepage support of Thai characters in the source code .
how to make it support Thai characters? (TM-T88V also support Thai characters)
Thank you