星期五, 20 6 月, 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 年疫情才知道原來自己這是走在時代的潮流尖端。 感謝許多老闆和貴人相助,至今目前尚能存活,在台北街頭努力著。

近期文章

  • 於 MacOS 中,整合自然語言,自動化添加行事曆事件
  • 使用 deepwiki-open 針對程式碼產生 WIKI
  • 使用 Tailwind CLI 快速建立靜態 CSS 檔的基本步驟
  • Visual Studio Code 的 PHP CS Fixer 設定
  • MacOS 添加本地伺服器的 DNS

分類

  • 心得x體驗 (45)
  • 筆記x備忘 (77)
  • 閒談x雜記 (13)

贊助買咖啡

Facebook Instagram RSS

標籤

ai android cloudflare flutter git ios javascript linode linux MAC macos mis nginx php plugin QBQ!問題背後的問題 server work sublime sublime text vps vue.js vue3 What if What If? 如果這樣,會怎樣? wordpress 前端 原則 原子習慣 團隊,從傳球開始 團隊,從傳球開始:五百年都難以超越的 UCLA 傳奇教練伍登培養優越人才和團隊的領導心法 壓力測試 外掛 如果這樣,會怎樣?:胡思亂想的搞怪趣問 正經認真的科學妙答 心得 情緒 活動心得 灰階思考 約翰‧漢尼斯 股癌 自慢10 自慢10:18項修練 記錄 謝孟恭 讀書心得 這一生,你想留下什麼?

文章分類

  • 心得x體驗 (45)
  • 筆記x備忘 (77)
  • 閒談x雜記 (13)

近期文章

  • 於 MacOS 中,整合自然語言,自動化添加行事曆事件
  • 使用 deepwiki-open 針對程式碼產生 WIKI
  • 使用 Tailwind CLI 快速建立靜態 CSS 檔的基本步驟
  • Visual Studio Code 的 PHP CS Fixer 設定
  • MacOS 添加本地伺服器的 DNS

近期留言

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

文章月曆

2025 年 6 月
日 一 二 三 四 五 六
1234567
891011121314
15161718192021
22232425262728
2930  
« 5 月    

© 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.