台灣最大程式設計社群網站
線上人數
1251
 
會員總數:243449
討論主題:188175
歡迎您免費加入會員
討論區列表 >> PHP >> 處理fpdf 無法印 utf8 中文字
[]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
處理fpdf 無法印 utf8 中文字
價值 : 50 QP  點閱數:604 回應數:50

樓主

code
門外漢
0 2
124 35
發送站內信



各位好

用fpdf套件列印中文字,有些中文會有亂碼

嘗試用相關轉碼或是類似chinese-unicode 套件無法解決

請問有相關經驗同仁知道怎解決嗎?

謝謝回答


搜尋相關Tags的文章: [ utf8 ] ,
本篇文章發表於2018-10-19 15:06
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
作者回應

code
檢舉此回應
補充

資料庫:mssql 2008

儲存資料是utf8
本篇文章回覆於2018-10-19 15:36
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

淺水員
檢舉此回應
剛剛搜尋了一下
fpdf 對於 utf-8 的支援不是很好
tcpdf 源自於 fpdf ,支援 utf-8
也許從這邊下手會比較好解決?
本篇文章回覆於2018-10-19 15:44
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

code
檢舉此回應
好的

我從tcpdf試試看
本篇文章回覆於2018-10-19 15:55
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

code
檢舉此回應
你好

我從tcpdf example01 測試

我嘗試從資料庫抓姓名

卻發生姓名在pdf上顯示空白


請問要怎解決


$pdf->SetFont('msungstdlight', '', 14, '', true); // 繁中


$sql = "SELECT * FROM table WHERE id='".000."'";
$stmt = sqlsrv_query( $conn, $sql);//資料庫執行語法

$row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_BOTH);//讀取資料庫資料

$name = $row[0];//代表姓名


$html =$name ;

// Print text using writeHTMLCell()
$pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true);




本篇文章回覆於2018-10-19 16:13
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

code
檢舉此回應
測試報告

在tcpdf example 用 notepad 使用sql語法 印出難字會出現?

檔案編碼為 unix/ansi

檔案改為 utf8 或是utf8\BOM

中文字都是亂碼
本篇文章回覆於2018-10-19 16:47
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

淺水員
檢舉此回應
目前我試 example8
example8 讀的檔案是 utf-8 編碼的
用您上面列的字型可以正常顯示中文
至於所謂的罕見字不知道是不是有範例
我剛剛網路隨便搜尋幾個罕見字都有顯示出來
(可能還不夠偏)

本篇文章回覆於2018-10-19 18:57
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

code
檢舉此回應
6樓 謝謝你

我會繼續測試
本篇文章回覆於2018-10-20 16:47
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

code
檢舉此回應
淺水員 你好

使用example8

我用先前資料庫語法抓取姓名

但姓名顯示空白

姓名的難字是'^'



本篇文章回覆於2018-10-21 20:36
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

code
檢舉此回應
淺水員 你好

以下是我程式測試

測試檔案: tcpdf/ exmple08.pdf

資料庫:mssql 2008

php:5.2.11

測試語法:

$sql = "SELECT * FROM table WHERE id='".000."'";
$stmt = sqlsrv_query( $conn, $sql);//資料庫執行語法

$row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_BOTH);//讀取資料庫資料

$name = $row[0];//代表姓名


$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);

$pdf->SetFont('msungstdlight', '', 14, '', true); // 繁中

$pdf->AddPage();


$pdf->Write(0, $html , '', 0, 'C', true, 0, false, false, 0);

ob_end_clean();

$pdf->Output('example_008.pdf', 'I');


如果資料庫的欄位是數字,可以出現在pdf上
但資料是中文,或是數字與中文 都是空白 orz


本篇文章回覆於2018-10-21 20:50
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
作者回應

code
檢舉此回應
測試報告

我在example08,先把pdf相關程式打註解

單純從資料庫抓學生難字

抓出來字都是:���

但如果我對語法設定為

$connectionInfo = array( "UID"=>"",
"PWD"=>"",
"Database"=>""
"CharacterSet"=>"UTF-8" );



會顯示錯誤500

把"CharacterSet"=>"UTF-8" 拿走會抓出��� 0.0


本篇文章回覆於2018-10-22 10:31
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
作者回應

code
檢舉此回應
測試報告

在tcpdf/example08

增加
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>


可以出現顧客的難字,但不會出現全名
本篇文章回覆於2018-10-22 11:43
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
回應

淺水員
檢舉此回應
1. 先確認是不是能正常輸出,跑看看下面這段程式看能不能輸出


2. 如果上面可以正常輸出「^」這個字,代表 tcpdf 跟字型沒問題
那麼問題可能在文字編碼
例如可以印出 9 樓變數 $name 的 16 進位值,以判斷該字串是不是真的為 utf-8
本篇文章回覆於2018-10-22 13:04
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
作者回應

code
檢舉此回應
謝謝喔

在忙別的

我會繼續測試
本篇文章回覆於2018-10-22 14:18
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
14樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
這邊你還需要注意一些事。

mysql是否有正確的做好utf8編碼。

程式檔案編碼是否也是用utf8

因為從你的問題來看。你這只是單純的編碼問題。並非是pdf的問題。
你先不要處理pdf。先做單純輸出顯示看看再說。

我推測你用的編輯器,可能設定在big5或ansi文件編碼。請記得要改成utf8無bom處理。
本篇文章回覆於2018-10-23 16:50
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
15樓
作者回應

code
檢舉此回應
謝謝大家的建議

檢查系統後有找到原因,雖然mssql與php有預設utf8

但透過資料庫抓取,格式都會變成big5

目前將姓名用[unicode]存到mssql

再用php convert 可以轉為 utf8....(這是和我朋友花了5天想到解法)

當初以為編碼問題很簡單,原因牽涉層面很大@@

若tcpdf有不懂會發問
本篇文章回覆於2018-10-24 08:48
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   

回覆
如要回應,請先登入.