前情提要這次的功能是要將訂單列印出多個PDF。以往印單頁的PDF 簡單作法就是以網頁的方式,排版出列印樣式,右鍵列印(圖1)。
網頁右鍵列印 (圖1)
那這次就做了不一樣的作法,直接產出PDF。讓使用者下載印好內容的pdf,不再是透過瀏覽器+右鍵列印。因為撰寫的語言是PHP,這次用的工具是TCPDF(圖2) 。也有其他在產出PDF的工具,如domPDF。TCPDF列印(圖2)產生TCPDF可使用的字體選用語系可接受的字型在使用TCPDF的時候,有些需要注意的地方,例如字型檔.ttf、出血設定(沒設定好 有可能被裁切到)。以字體來說,因為TCPDF預設是helvetica,但這個字型並不支援中文,若是沒有設定能印出中文的字型,則會印出一堆問號?。(參考官網設定)TCPDF 內建也有提供可印出繁體中文的字型.ttf,如: cid0cs、cid0ct、cid0jp 、msungstdlight,但是使用內建的字型檔,有些可能出現偏移的狀況或者漏字的情況,這也會和字型檔有關。(圖3、圖4、圖5、圖6)cid0cs(圖3)cid0ct(圖4)cid0jp(圖5)msungstdlight(圖6)可以看到一樣的區塊,但是印出來的字型樣式卻有些不同,有的字印出來甚至會跑版,如:cid0ct,只要是括弧的第一個字就會移位或者有字體消失,如: cid0cs 訂購商品的字直接消失。網路上有許多文章在探討中文印不出來可以選用那些樣式,找了一下之後發現幾個字型是印出來支援繁體字滿完整的字型 。
DroidSansFallback安卓系统(圖7)、 justfont粉圓(圖8)。
DroidSansFallback安卓系统(圖7)
粉圓字體(圖8)
產出TCPDF可接受的檔案以droidsansfallback.ttf為範例,在網路上可以下載到開源的使用字型後,要轉成TCPDF可接受的格式,並放入到TCPDF/fonts/(圖9),這樣子TCPDF才能找到對應字型
轉成TCPDF可接受的字體(圖9)
可使用TCPDF 內建的function (圖10),來產生字體 TCPDF_FONTS::addTTFfont('字體.ttf');
轉換完的字體,會在TCPDF/fonts/
TCPDF_FONTS::addTTFfont產生字體(圖10)
最後就能在使用TCPDF的時候配置印出中文字型了。(圖11)
心得
原本在dompdf 遇到的字型問題,以為換個工具tcpdf就沒事了。結果都是一樣的😅雖然tcpdf可支援html+css 樣式,但也不是全部的css attribute 都支援。[類似情況]
在不是特殊情況下用TCPDF 方式列印pdf是滿輕鬆的,偶爾換個口味試試看,如果是網頁資料需要印獎狀有大量圖片排版的pdf的話,我個人還是偏好網頁的列印,至少css 都能吃,印出來也不會走板。