Contents

簡單測試中文字形 pdf 方法(未測試)

這篇先留個誠實註記,當時我是在整理「要怎麼快速驗證 PDF 對中文是否友善」,不是完整實測報告,所以檔名才會寫未測試。不過如果之後又遇到 PDF 中文亂碼、字形缺字、列印字體跑掉,至少可以依照這篇的方向快速做第一輪驗證。

先釐清要測什麼

PDF 遇到中文問題,通常不是只有一種:

  1. 直接輸出變成方塊字。
  2. 顯示正常,但換台電腦列印就變形。
  3. 內容可以看,搜尋或複製文字卻是亂碼。
  4. 表格、粗體、換行在中文情境下跑版。

所以我覺得測試不能只看「能不能顯示中文」,至少要驗證下面幾項:

  1. 是否能正常嵌入字型。
  2. 常用中文字是否會缺字。
  3. 英文、數字、中文混排是否正常。
  4. 匯出後換一台電腦開啟是否仍正常。

我會準備的測試內容

如果只是快速驗證,建議先用一段固定文字:

1
2
3
4
中文測試 ABC 123
繁體中文、簡體中文、全形符號()【】
金額:NT$ 1,234.56
常見姓名:王小明、陳美玲

如果這段都無法穩定顯示,通常就代表字型嵌入或字集支援還沒處理好。

jsPDF 方向

前端如果要直接在瀏覽器產 PDF,jsPDF 是很常見的選項,但中文往往不是開箱即用。核心觀念通常是先把字型轉成可載入格式,再註冊到 jsPDF 中使用。

我覺得 jsPDF 適合的情境:

  1. 前端報表量不大。
  2. PDF 版面比較單純。
  3. 希望完全在瀏覽器端產生。

要注意的是,如果只是套預設字型,通常很容易在中文這關出問題。

參考:

jsPDF-CustomFonts-support

JSPDF支持中文(思源黑体)采坑之旅,JSPDF中文字体乱码解决方案 - 有蚊子 - 博客园

解决jspdf中文乱码、表格中文乱码!–终极版!!_huanhuan03的博客-CSDN博客_jspdf中文乱码

Go 方向

如果 PDF 是在後端批次產生,Go 的函式庫也值得考慮。像 gofpdf 這種做法,比較適合:

  1. 後端集中產生報表。
  2. 想要把 PDF 產出放在 API 或排程服務。
  3. 不希望前端負責字型與版面細節。

但 Go 這條路一樣要先確認字型處理方式,不是語言換了就自動沒問題。

參考:

jung-kurt/gofpdf: A PDF document generator with high level support for text, drawing and images

Go处理PDF - SegmentFault 思否

PowerShell 方向

如果需求偏管理工具、內部文件自動化,PowerShell 也有可用套件。這種方案比較偏 Windows 管理流程,不一定適合高流量網站,但臨時要做報表、批次匯出、合併 PDF 時反而很省事。

參考:

EvotecIT/PSWritePDF: PowerShell Module to create, edit, split, merge PDF files on Windows / Linux and MacOS

我自己的選型想法

如果是 Web 頁面臨時匯出 PDF,我會先看 jsPDF。
如果是正式報表服務,我會偏向後端集中產生。
如果只是內部工具自動化,PowerShell 反而可能最省時間。

這篇先當成方向整理。之後如果真的做完整實測,我會至少補上同一份中文字串、同一個字型、同一份版面去比較哪一套最穩。