mike42 / escpos-php

PHP library for printing to ESC/POS-compatible thermal and impact printers
Other
2.57k stars 862 forks source link

Thai characters printing #51

Closed kajornsakp closed 9 years ago

kajornsakp commented 9 years ago

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

mike42 commented 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)

kajornsakp commented 9 years ago

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

mike42 commented 9 years ago

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-

2015-08-thai (This is from character-encoding.php)

I'm not sure whether is this correct. Can you comment on-

kajornsakp commented 9 years ago

Suitability - This string can be used very well for printing test

Output - The output should be like this
11911084_10203433685681205_647179999_n

(From character-encoding.php)

mike42 commented 9 years ago

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).

ramenpepe commented 9 years ago

img_20150927_143338 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?

nobutsta commented 8 years ago

kajornsakp ทำยังไงถึงออกทั้งสระบน/ล่าง/การันต์ แบบนี้ครับ ผมทดลองแล้วมันยังอยู่บรรทัดเดียวกันอยู่เลย เพิ่ม Codepage::CP874 แล้วก็ยังไม่ได้

kajornsakp commented 8 years ago

@nobutsta ของผมใช้กับ epson TM-T88V พอเพิ่ม Codepage::CP874 เข้าไปก็พิมพ์ออกมาได้นะครับ ถ้าเป็นรุ่นอื่นๆ อาจจะต้องใช้ codepage ที่ support กับ printer รุ่นนั้นๆอะครับ

nobutsta commented 8 years ago

ผมซื้อของจีนมาใช้ ปวดหัวเลยครับ สรุปว่าต้องเขียน 3 บรรทัด สระลอย, อักษร, สระจม กระดาษเกือบหมดม้วนกว่าจะพิมพ์ให้อ่านออก /ขอบคุณครับ

net1 commented 8 years ago

@nobutsta พอจะให้ตัวอย่างการชดเชย สระได้ไหมครับ พอดีใช้เครื่องจากจีนเหมือนกัน

nobutsta commented 8 years ago

@net1 ผมใช้วิธีเว้นวรรคสระและวรรณยุกต์ให้ตรงกับอักษรในบรรทัดต่อไปแทนครับ เช่น จะพิมพ์คำว่า "ดี" บรรทัดแรกผมก็พิมพ์ "สระอี" แล้วก็สั่งให้โปรแกรมเว้นบรรทัด บรรทัดต่อมาก็พิมพ์ "ด" ให้อยู่ใต้ "สระอี" พอดี ทำแบบนี้เสียกระดาษและเวลาหน่อย แต่เป็นวิธีเดียวที่ใช้ได้กับเครื่องจีนครับ

thaihaha commented 6 years ago

ผมซื่อ 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 สามารถเข้าไปเพิ่มตรงไฟล์ใหนครับ

thaihaha commented 6 years ago

XPrinter V3.0C.pdf ผมลอง เซตโปรแกรมที่มากับแผ่นซีดี เซต codepage เป็น 255 ตอนนี้ลองปรินดู ภาษาไทยปรินออกแล้วครับ แต่สระต่างๆ ไม่เรียง มันเป็นแบบ "ด ี มด ี มด ี มด ี มด ี มด ี มด ี มด ี มด ี ม"

ตอนนี้ปรินส์ภาษไทยออก เลยเดาต่อว่า เครื่อง ปรินสลิปที่ควรซื้อ ต้องซื้อแบบที่มี codepage เป็นภาษาไทยด้วย

ไฟล์ที่แนบมา เป็นการเซต codepage ให้เป็นภาษาไทยในเครื่อง ใช้โปรแกรม XPrinter.V3.0C เซ็ตเครื่อง

ตอนนี้ผม set codepage แล้วการแสดงภาษาไทยก็ยังไม่สมบูรณ์ ผมเดาว่าเป็นเพราะตัวเครื่อง ผมน่าจะไปซื้อเครื่องใหม่ ใช่หรือไม่ครับ เครื่อง xprinter รุ่น xp-58iil ควรคืนร้านเขาไป

thaihaha commented 6 years ago

@nobutsta มีตัวอย่าง code ทำสระลอย และสระจม หรือเปล่าคับ

penthai06 commented 6 years ago

ผมใช้เทคนิค save เป็นภาพแล้วก็ไปดึงภาพให้ปริ้นออกมาจะง่ายกว่ามากครับไม่ต้องมานั่งปวดหัวเรื่องปริ้นแล้วสระลอย

taveevut commented 5 years ago

ทักพี่ๆทุกคน ผมติดปัญหาเรื่อง lineheight รู้สึกว่ามัน ห่างเกินไป พอจะมีวิธีที่ทำให้ความห่างลดลงหน่อยไหมครับ ผมใช้ xprinter 58 series ครับ ขอบคุณครับ

deawx commented 5 years ago

if you use xp-58 you can use iconv convert string

EXP: $printer -> text(iconv("UTF-8", "TIS-620", "ศรีรัตนะคอมพิวเตอร์\n"));

it work for me.

simesghetto commented 4 years ago

ปริ้นภาษาไทยไม่ได้ครับ เครื่อง Xprinter N160III ท่านใดทำได้แล้ว แนะนำหน่อยครับ

sutin1234 commented 4 years ago

Xprinter-X810 สระไม่ลอยครับ แต่มันเรียงต่อกัน

chukiatt commented 2 years ago

ผมใช้เทคนิค save เป็นภาพแล้วก็ไปดึงภาพให้ปริ้นออกมาจะง่ายกว่ามากครับไม่ต้องมานั่งปวดหัวเรื่องปริ้นแล้วสระลอย

ผมเองก็ใช้เทคนิคนี้ แต่มีปัญหาเรื่องพิมพ์แล้วกระตุกและช้า รวมถึงมีเสียงดังด้วยครับ ไม่ทราบของคุณมีปัญหานี้ไหมครับ