星期日, 17 8 月, 2025
No Result
View All Result
育心文具行

育心文具行

  • 首頁
  • 心得x體驗
  • 筆記x備忘
  • 閒談x雜記
  • 我的工具箱
  • 關於我
育心文具行
  • 首頁
  • 心得x體驗
  • 筆記x備忘
  • 閒談x雜記
  • 我的工具箱
  • 關於我
No Result
View All Result
育心文具行
Home 筆記x備忘

解決 PHP 的 dompdf 中文字體亂碼的方法

2025-01-03
in 筆記x備忘
Reading Time:5 mins read
A A
0

記錄一下一個之前解決過的問題。

在使用 php 的 dompdf 會有中文字無法正確讀取的問題,這主要是字型的關係,官方有提供一個解決方法。

先說什麼是 dompdf 請參考開源程式說明

Dompdf 是一個 HTML 到 PDF 轉換器

從本質上講,dompdf(主要)是一個用 PHP 編寫的、符合CSS 2.1 的HTML 佈局和渲染引擎。它是一個樣式驅動的渲染器:它將下載並讀取外部樣式表、內聯樣式標籤以及各個 HTML 元素的樣式屬性。它還支援大多數表現性 HTML 屬性。

GitHub – dompdf/dompdf: HTML to PDF converter for PHP

github.com

HTML to PDF converter for PHP. Contribute to dompdf/dompdf development by creating an account on GitHub.

這是一個 PHP 的工具,有幾點注意:

  1. 如果需要連外部圖片的話需要開啟設定,關鍵字請找:isRemoteEnabled
  2. 圖片或是連結請用絕對路徑。
  3. 不是全支援 CSS 3
  4. 通常會指定紙張樣式,這塊 html 需要考慮平面印刷的特色才行。

接下來讓 AI 說明,使用 dompdf 支援可使用中文字型的方法。


要在 Dompdf 中正確顯示中文,您需要引入支援中文的字體。以下是詳細步驟:

  1. 安裝 Dompdf:如果尚未安裝,請使用 Composer 安裝 Dompdf:
   composer require dompdf/dompdf
  1. 下載 load_font.php 工具:從 Dompdf 的 utils 儲存庫下載 load_font.php,並將其放置在 vendor/dompdf/dompdf 目錄下,與 lib 和 src 目錄同級。
  2. 下載中文字體:取得支援中文的字體檔案(如 simsun.ttf 或 msyh.ttf),並將其放置在與 load_font.php 相同的目錄中。
  3. 修改 load_font.php:確保 load_font.php 正確載入自動加載器。
   // 確認以下路徑正確
   require_once "../../autoload.php";
  1. 安裝字體:在命令列中執行以下命令來安裝字體:
   php load_font.php 字體名稱 字體檔案.ttf

例如,若字體名稱為 simsun,字體檔案為 simsun.ttf,則執行:

   php load_font.php simsun simsun.ttf
  1. 確認字體安裝成功:在 vendor/dompdf/dompdf/lib/fonts 目錄中,應該能看到新生成的字體檔案(如 simsun.ttf 和 simsun.ufm)。此外,檢查 installed-fonts.json 檔案,確認字體資訊已被記錄。
  2. 在 CSS 中引用字體:在您的 HTML 或 CSS 中,使用 @font-face 規則引用新安裝的字體,並在需要的地方設置 font-family:
   @font-face {
       font-family: 'simsun';
       src: url('path/to/simsun.ttf') format('truetype');
   }
   body {
       font-family: 'simsun';
   }

請確保 src 的路徑正確指向字體檔案的位置。

  1. 生成 PDF:在生成 PDF 的程式碼中,確保載入的 HTML 包含上述字體設定。以下是範例程式碼:
   use Dompdf\Dompdf;
   use Dompdf\Options;

   // 初始化 Dompdf
   $options = new Options();
   $options->set('isRemoteEnabled', true);
   $dompdf = new Dompdf($options);

   // 載入 HTML 內容
   $html = '<html><head><style>
   @font-face {
       font-family: "simsun";
       src: url("path/to/simsun.ttf") format("truetype");
   }
   body {
       font-family: "simsun";
   }
   </style></head><body>您的中文內容</body></html>';
   $dompdf->loadHtml($html);

   // 設定紙張大小和方向
   $dompdf->setPaper('A4', 'portrait');

   // 生成 PDF
   $dompdf->render();

   // 輸出 PDF
   $dompdf->stream('document.pdf');

請確保 @font-face 中的 src 路徑在 HTML 中是可訪問的。

按照上述步驟,您應該能夠在 Dompdf 中成功引入並使用中文字體,確保生成的 PDF 正確顯示中文內容。


AI 陷阱小提醒: 第七點的 @font-face 不用設置,在 html 中 css 設定 path 根本抓不到 ttf 檔案。

我在 Github 上弄了兩個頁面可以把他架設起來試試看,請點這裡和這裡。

同場加映,有時我們想找中文開源字型,請到這裡。

可以 filiter 你要的字型,點擊搜尋出來的字型後再點擊 「Get font」按鈕。

在這裡可以從 Download all 中下載字型,也可以從 embed code 中找到字型的連結。

舉例像是抓出來的這個:

https://fonts.googleapis.com/css2?family=Noto+Sans+TC:[email protected]&family=Noto+Serif+TC:[email protected]&display=swap

打開來會得到一串 @font-face 的 css 資料,除了可以引用以外,也可以從裡面複製處來使用。 以上!

Tags: Chinese fontsdompdffont embeddinggarbled textload_font.phpPDFPDF中文php中文字體亂碼
Share22Tweet14
Previous Post

使用 NoteGPT 生成「京華城土地違法容積獎勵案」起訴書摘要

Next Post

MacOS 上將指定資料夾內檔案繁體轉簡體

Related Posts

筆記x備忘

Sublime Text3 檢查 Codeigniter4 專案的外掛

使用 Sublime Text 檢查 C...

2024-12-16
100
筆記x備忘

解決 PHP8.2 mb_convert_encoding 方法已經棄用的問題。

PHP 中 mb_convert_enc...

2024-10-27
100
筆記x備忘

Nginx 中同一個網域設定不同應用程式/目錄

技能點還沒有點太多的領域一點點成果就會獲...

2024-08-22
100
筆記x備忘

ionCube 加密/混淆 PHP for Codeigniter4 筆記

前陣子在搞 Android 的混淆,在第...

2024-03-10
100
筆記x備忘

WordPress 上 Cookie 的 SameSite 問題

參考這篇問題,主要是描述在支付頁面 re...

2024-01-04
100
筆記x備忘

PHP 源碼掃描實作,使用 SonarQube

PHP 的原始碼弱點掃描實作,這邊使用 ...

2023-11-27
100
Load More
Next Post

MacOS 上將指定資料夾內檔案繁體轉簡體

實作 js 函式庫包裝為 API 提供給後端呼叫

Mac 上使用 pyenv 管理 python 環境

全站搜尋

No Result
View All Result

關於我

育心文具行

Jerry Lin

程式設計師

育心文具行是一家文具店,老闆的小兒子是一個設計師,職業是設計程式,興趣是設計人,倒是還沒有實作的機會。
--
所有的相遇都不是巧合。
在廣告公司待了三年有兩年多在做內容產品,離職後繼續在內容產業走了四年多,最後選則離開台灣的公司體制在家 SOHO ,碰上了 2020 年疫情才知道原來自己這是走在時代的潮流尖端。 感謝許多老闆和貴人相助,至今目前尚能存活,在台北街頭努力著。

近期文章

  • LLM 生成參數清單與說明
  • 使用 google 的 Gemini CLI 來製作字幕
  • 2025-07-29 社交模式檢討
  • 2025-07-25 社交模式檢討
  • 2025-07-12 N8N Workshop 筆記心得

分類

  • 心得x體驗 (47)
  • 筆記x備忘 (79)
  • 閒談x雜記 (15)

贊助買咖啡

Facebook Instagram RSS

標籤

android ci4 cloudflare Codeigniter codeigniter 4 flutter git ios linode linux MAC macos nginx php plugin QBQ!問題背後的問題 server work sublime sublime text vps vue.js vue3 What if What If? 如果這樣,會怎樣? wordpress 備份 原則 團隊,從傳球開始 團隊,從傳球開始:五百年都難以超越的 UCLA 傳奇教練伍登培養優越人才和團隊的領導心法 外掛 如果這樣,會怎樣?:胡思亂想的搞怪趣問 正經認真的科學妙答 媒體識讀 工作的原則 心得 意志力 活動心得 灰階思考 第三部分 第二部分 第四部分 股癌 自慢10 自慢10:18項修練 謝孟恭 讀書心得

文章分類

  • 心得x體驗 (47)
  • 筆記x備忘 (79)
  • 閒談x雜記 (15)

近期文章

  • LLM 生成參數清單與說明
  • 使用 google 的 Gemini CLI 來製作字幕
  • 2025-07-29 社交模式檢討
  • 2025-07-25 社交模式檢討
  • 2025-07-12 N8N Workshop 筆記心得

近期留言

  • 「Bolin Lai」於〈WordPress 之中藍新金流開啟後, Elementor 外掛有時會打不開的問題處理〉發佈留言
  • 「Jerry Lin」於〈WordPress 之中藍新金流開啟後, Elementor 外掛有時會打不開的問題處理〉發佈留言
  • 「JCL」於〈WordPress 之中藍新金流開啟後, Elementor 外掛有時會打不開的問題處理〉發佈留言

文章月曆

2025 年 8 月
日 一 二 三 四 五 六
 12
3456789
10111213141516
17181920212223
24252627282930
31  
« 7 月    

© 2020 hipster.crazyjerry.studio - a blog about experience, notes and nonsense, by Jerry Lin.

No Result
View All Result
  • 首頁
  • 心得x體驗
  • 筆記x備忘
  • 閒談x雜記
  • 我的工具箱
  • 關於我

© 2020 hipster.crazyjerry.studio - a blog about experience, notes and nonsense, by Jerry Lin.