Jump to content

Không thể hiển thị tiếng Việt trong đơn hàng với định dạng pdf


Hungnh

Recommended Posts

Mình nghĩ vẫn đề là chế độ encode file pdf đó. Mặc định là iso-8859-1. Với chuẩn mã hóa này thì không thể hiện thị được tiếng việt. Bạn mở thư mục fpdf\font\makefont add thêm bảng mã utf-8 có lẽ sẽ giải quyết được vấn đề này :).

Link to comment
Share on other sites

Mình nghĩ vẫn đề là chế độ encode file pdf đó. Mặc định là iso-8859-1. Với chuẩn mã hóa này thì không thể hiện thị được tiếng việt. Bạn mở thư mục fpdf\font\makefont add thêm bảng mã utf-8 có lẽ sẽ giải quyết được vấn đề này :).


Theo như bạn nói thì bạn đã giải quyết được vấn đề này chưa. Bạn nói cụ thể hơn tí nữa để anh em học hỏi được không?
Cảm ơn
Link to comment
Share on other sites

Mình nghĩ vẫn đề là chế độ encode file pdf đó. Mặc định là iso-8859-1. Với chuẩn mã hóa này thì không thể hiện thị được tiếng việt. Bạn mở thư mục fpdf\font\makefont add thêm bảng mã utf-8 có lẽ sẽ giải quyết được vấn đề này :).

add thêm bảng mã utf-8 là làm như thế nào vây bạn?
thanks.
Link to comment
Share on other sites

Các bảng mã này đều chỉ có 256 ký tự, trong khi unicode là 65536 kí tự. Mình thấy trong file classes/PDF.php có sử dụng hàm Tools::iconv('utf-8', self::encoding(), $value) có lẽ dùng để hack font cho mã utf-8. Sửa hàm constructor đổi font về Times (Times-Roman)

/**
   * Constructor
   */
   function PDF($orientation='P', $unit='mm', $format='A4')
   {
       global $cookie;

       if (!isset($cookie) OR !is_object($cookie))
           $cookie->id_lang = intval(Configuration::get('PS_LANG_DEFAULT'));
       $lang = strtoupper(Language::getIsoById($cookie->id_lang));
       $conf = Configuration::getMultiple(array('PS_PDF_ENCODING_'.$lang, 'PS_PDF_FONT_'.$lang));
       self::$_pdfparams[$lang] = array(
           'encoding' => (isset($conf['PS_PDF_ENCODING_'.$lang]) AND $conf['PS_PDF_ENCODING_'.$lang] == true) ? $conf['PS_PDF_ENCODING_'.$lang] : 'utf-8',
           'font' => (isset($conf['PS_PDF_FONT_'.$lang]) AND $conf['PS_PDF_FONT_'.$lang] == true) ? $conf['PS_PDF_FONT_'.$lang] : 'times'
       );


Các bảng mã này viết dưới đuôi .map. Các bạn copy file iso-8859-1.map, lưu thành file utf-8.map.

Sau đó sử dụng tiện ích charmap (Windows + R > charmap). Chọn Character set:Unicode, Group by Unicode subrange. Chọn Advanced View các bạn sẽ thấy các ký tự tiếng Việt ở đó.
Chèn các kí tự tiếng Việt còn thiếu vào trong file utf-8.map ở các vị trí ".notdef" ( không được định nghĩa) tương ứng với 2 ký tự cuối trong mã ký tự của nó 9 ( Mình cũng không hiểu sao PS Team lại để mã như vậy).
Ví dụ :Ă --- !02 U+0102 Abreve (phần định nghĩa viết tắt bởi: "ký tự + dấu")

Nếu muốn xem toàn bộ bảng mã Unicode (dưới dạng file PDF) vào http://www.unicode.org. Trong đó, click "Code Charts" và bạn sẽ thấy nhiều "trang mã". Toàn bộ các kí tự tiếng Việt có thể được tìm thấy ở các trang Latin-1 Supplement, Latin Extend A và Latin Extend B, và Latin Extended Additional.

( Dạo này mình cũng khá bận nên không có thời gian rảnh lắm.)

Link to comment
Share on other sites

  • 2 months later...

Mình đang dùng Prestashop 1.0.0.8 và mình chỉnh trong BO phần PDF là unicode 1258 và mình có phần invoice PDF đọc được tiếng Việt. Nhưng lúc gõ các bạn phải chọn mã font unicode 1258 (tips: Các mục có sẵn các bạn phải gõ trong code chứ ko gõ trong phần translates ko có tác dụng)

Link to comment
Share on other sites

  • 1 year later...
  • 2 weeks later...
  • 2 months later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...