https://drive.google.com/file/d/1XiNj0AWpxZCxiHISukSddBNg2Nc5-9Mo/view?usp=sharing
想請問這是我在https://www.tenantcloud.com/ 這個網站測試的PDF檔,我並沒有告訴她我內容是使用甚麼語言,內容也是使用者隨意貼的,他卻可以將幾乎所有語言正確顯示(包括中文、日文、韓文),想請問這要如何辦到。
目前小弟使用的是tcpdf(php),使用freeserifb 可以滿足大部分語言但是不包含中文,使用中文ttf檔又無法包含其他語言,想請問有解決辦法嗎? 還是有更好的solution
目的:想做成PDF是在使用者輸入完資料後線上產生
先了解一下電腦使用的內碼,熟悉各國文字的內碼與使用內碼的頁碼,就能正確產出文字,才能生成PDF檔案。
https://zh.wikipedia.org/wiki/%E5%85%A7%E7%A2%BC
http://www.cmex.org.tw/page.jsp?SN=chinese&ID=30&la=0
https://blog.miniasp.com/post/2019/01/02/Common-Regex-patterns-for-Unicode-characters
使用freeserifb 可以滿足大部分語言但是不包含中文,使用中文ttf檔又無法包含其他語言
偵測字串中每個字的 code point
然後依據 code point 選擇不同的字型
例如拿 tcpdf 的 Example008.php 來改
改下面這行
//$pdf->Write(5, $utf8text, '', 0, '', false, 0, false, false, 0);
myWrite($pdf, $utf8text);
補上 myWrite 的程式碼大概是這樣
function myWrite($pdf, $text) {
$text=unpack('n*', mb_convert_encoding($text, 'UTF-16BE', 'UTF-8'));
$currentFont=null;
foreach($text as $codePoint) {
$ft=0x4E00<=$codePoint && $codePoint<=0x9FFF?'imingcp612':'freeserif';
if($currentFont!==$ft) {
$currentFont=$ft;
$pdf->SetFont($currentFont, '', 12);
}
$pdf->Write(5, mb_chr($codePoint, 'UTF-8'), '', 0, '', false, 0, false, false, 0);
}
}