mpdf增加字體併進行使用

来源:https://www.cnblogs.com/zhaoying/p/18197109
-Advertisement-
Play Games

1、先將字體複製到目錄:\vendor\mpdf\mpdf\ttfonts2、再修改文件\vendor\mpdf\mpdf\src\Config\FontVariables.php,對照已經添加的simsun,simkai,simhei,fangzhenweibei,fangzhenheiti等字體 ...


 

1、先將字體複製到目錄:\vendor\mpdf\mpdf\ttfonts

2、再修改文件\vendor\mpdf\mpdf\src\Config\FontVariables.php,對照已經添加的simsun,simkai,simhei,fangzhenweibei,fangzhenheiti等字體進行增加即可。

3、再在需要設置字體的文字加上font-family:fangzhenweibei;樣式即可。

 

 

附FontVariables.php文件代碼:

  1 <?php
  2 
  3 namespace Mpdf\Config;
  4 
  5 class FontVariables
  6 {
  7 
  8     private $defaults;
  9 
 10     public function __construct()
 11     {
 12         $this->defaults = [
 13 
 14             //指定要使用的字體度量:
 15             //-'winTypo使用OS/2表中的sTypoAscender等,通常建議使用-BUT
 16             //-“win”使用OS/2中的WinAscent等,inpractice似乎在Windows環境中更常用
 17             //-'mac'使用hhea表中的Ascender等,併在mac/OSX環境中使用
 18 
 19             'fontDescriptor' => 'win',
 20 
 21             //對於自定義字體數據文件夾,請設置配置項“fontDir”。它也可以是目錄陣列,
 22             //然後將返回第一個找到的文件
 23             //可選地設置字體(在“fontdata”中定義的名稱)以用於缺少的字元
 24             //使用useSubstitutions時。使用覆蓋範圍廣的字體-dejavusansconsted是一個好的開始
 25             //只能使用子集(否則將添加非常大的文件)
 26             //可以指定多個字體,但每個字體都會增加腳本的處理時間
 27 
 28             'backupSubsFont' => ['dejavusanscondensed', 'freesans', 'sun-exta'],
 29 
 30             //可選地設置用於CJK字元的字體(名稱在“fontdata”中定義如下)
 31             //使用useSubstitutions時,在平面2 Unicode(>U+20000)中。
 32             //如果可用,請使用類似hannomb或sun-extb的字體
 33             //只能使用子集(否則將添加非常大的文件)
 34 
 35             'backupSIPFont' => 'sun-extb',
 36 
 37             /*
 38                 此數組定義CSS或HTML字體系列的翻譯
 39                 到mPDF中使用的內部字體系列名稱。
 40                 無論安裝了何種字體,都可以包含任意數量的字體。
 41                 預設情況下,mPDF將採用CSS/HTML字體系列並刪除空格
 42                 更改為小寫,例如“Times New Roman”將被識別為
 43                 “時間新羅馬”
 44                 您只需要定義其他翻譯。
 45                 您也可以使用它來定義特定的替換,例如。
 46                 “helvetica”=>“arial”
 47                 設置通用替換(即無襯線或襯線字體)
 48                 通過在下麵的“sans_fonts”中包含字體系列
 49              */
 50             'fonttrans' => [
 51                 'times' => 'timesnewroman',
 52                 'courier' => 'couriernew',
 53                 'trebuchet' => 'trebuchetms',
 54                 'comic' => 'comicsansms',
 55                 'franklin' => 'franklingothicbook',
 56                 'ocr-b' => 'ocrb',
 57                 'ocr-b10bt' => 'ocrb',
 58                 'damase' => 'mph2bdamase',
 59             ],
 60 
 61             /*
 62                 此數組列出TrueType.ttf或.otf字體文件的文件名
 63                 (內部mPDF)字體系列名稱的每個變體。
 64                 ['R']=常規(普通),其他為粗體、斜體和粗體斜體
 65                 每個條目必須包含一個['R']條目,但其他條目是可選的。
 66                 僅此處輸入的字體(文件)可用於mPDF。
 67                 將首選預設值放在首位
 68                 如果在以下任何文件中找不到命名字體,將使用此選項
 69               'sans_fonts', 'serif_fonts' or 'mono_fonts'
 70 
 71               ['sip-ext'] = 'sun-extb', name a related font file containing SIP characters
 72               ['useOTL'] => 0xFF,    Enable use of OTL features.
 73               ['useKashida'] => 75,    Enable use of kashida for text justification in Arabic text
 74 
 75                 如果引用了.ttc TrueType集合文件,則字體編號
 76                 在集合中。集合中的字體已編號
 77                 從1開始,如.ttc文件中所示,例如。
 78               "cambria" => array(
 79                     'R' => "cambria.ttc",
 80                     'B' => "cambriab.ttf",
 81                     'I' => "cambriai.ttf",
 82                     'BI' => "cambriaz.ttf",
 83                     'TTCfontID' => array(
 84                         'R' => 1,
 85                     ),
 86                 ),
 87                 "cambriamath" => array(
 88                     'R' => "cambria.ttc",
 89                     'TTCfontID' => array(
 90                         'R' => 2,
 91                     ),
 92                 ),
 93              */
 94 
 95             'fontdata' => [
 96                 "dejavusanscondensed" => [
 97                     'R' => "DejaVuSansCondensed.ttf",
 98                     'B' => "DejaVuSansCondensed-Bold.ttf",
 99                     'I' => "DejaVuSansCondensed-Oblique.ttf",
100                     'BI' => "DejaVuSansCondensed-BoldOblique.ttf",
101                     'useOTL' => 0xFF,
102                     'useKashida' => 75,
103                 ],
104                 "simsun" => [
105                     'R' => "simsun.ttf",
106 //
107                 ],
108                 "simkai" => [
109                     'R' => "simkai.ttf",
110                 ],
111                 "simhei" => [
112                     'R' => "simhei.ttf",
113                 ],
114                 "fangzhenweibei" => [
115                     'R' => "fangzhenweibei.ttf",
116                 ],
117                 "fangzhenheiti" => [
118                     'R' => "fangzhenheiti.ttf",
119                 ],
120             ],
121             //如果字體包含SIP或SMP Unicode平面中的字元,請將其添加到此陣列
122             ////但你不需要它們。這允許使用更有效的子設置形式。
123             'BMPonly' => [
124                 "simsun",
125                 "simkai",
126                 "simhei",
127                 "fangzhenweibei",
128                 "fangzhenheiti",
129             ],
130 
131             //接下來的3個陣列做兩件事:
132             // 1. 如果HTML/CSS中引用的字體對mPDF不可用,這些數組將確定替換了襯線/無襯線或單空格字體
133             // 2. 每個數組中的第一個字體將是在上述情況下替換的字體(否則,順序無關緊要)
134             //使用mPDF字體系列名稱,即小寫和無空格(在$fonttrans中進行任何翻譯後)
135             //始終包含“sans-serif”、“serif”和“monospace”等。
136 
137             'sans_fonts' => ['simsun','simkai','simhei','fangzhenweibei','fangzhenheiti'],
138 
139             'serif_fonts' => ['simsun','simkai','simhei','fangzhenweibei','fangzhenheiti'],
140 
141             'mono_fonts' => ['simsun','simkai','simhei','fangzhenweibei','fangzhenheiti'],
142         ];
143     }
144 
145     public function getDefaults()
146     {
147         return $this->defaults;
148     }
149 
150 }
View Code

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近項目中需要用到js庫來渲染pdf文件,調研後發現無論是reach-pdf.js或者是svelte-pdf.js都是在pdf.js基礎上做了些許精簡,反而功能還不如原始的pdf.js來得全面。但是原始的庫幾乎沒有像樣的代碼示例,而能搜索到的大多數代碼不少都是十幾年前的了,在這個過程中踩了不少坑,做 ...
  • 一、是什麼 webpack proxy,即webpack提供的代理服務 基本行為就是接收客戶端發送的請求後轉發給其他伺服器 其目的是為了便於開發者在開發模式下解決跨域問題(瀏覽器安全策略限制) 想要實現代理首先需要一個中間伺服器,webpack中提供伺服器的工具為webpack-dev-server ...
  • 前言 在家沒事的時候刷抖音玩,抖音首頁的視頻怎麼刷也刷不完,經常不知不覺的一刷就到半夜了 不禁感嘆道 "垃圾抖音,費我時間,毀我青春" 這是我的 模仿抖音 系列文章的第二篇,本文將一步步實現抖音首頁 視頻無限滑動 的效果,乾貨滿滿 第一篇:200行代碼實現類似Swiper.js的輪播組件 第 ...
  • 一、錯誤類型 任何一個框架,對於錯誤的處理都是一種必備的能力 在Vue 中,則是定義了一套對應的錯誤處理規則給到使用者,且在源代碼級別,對部分必要的過程做了一定的錯誤處理。 主要的錯誤來源包括: 後端介面錯誤 代碼中本身邏輯錯誤 二、如何處理 後端介面錯誤 通過axios的interceptor實現 ...
  • 目錄VUE-局部使用快速入門常用指令v-forv-bindv-if & v-showv-onv-modelvue生命周期AxiosVue案例 VUE-局部使用 Vue 是一款用於構建用戶界面的漸進式的JavaScript框架。 (官方:https://cn.vuejs.org/) 快速入門 準備 準 ...
  • 前言 在上一篇 vue3早已具備拋棄虛擬DOM的能力了文章中講了對於動態節點,vue做的優化是將這些動態節點收集起來,然後當響應式變數修改後進行靶向更新。那麼vue對靜態節點有沒有做什麼優化呢?答案是:當然有,對於靜態節點會進行“靜態提升”。這篇文章我們來看看vue是如何進行靜態提升的。 什麼是靜態 ...
  • 一般我們在開發的時候,習慣上使用常規的關係型資料庫來設計資料庫表,對於一些業務表的欄位比較固定的場景,是一種非常不錯的選擇,而且查詢的時候,由於是基於固定的表欄位進行查詢,性能基本上是最優的。不過有一些場景下,業務信息的經常變化,使用常規的關係型資料庫來創建表欄位、刪除欄位的模式,肯定不是合適的處理... ...
  • 項目場景: 之前正式一直都是使用的手動註冊,而且測試環境還沒有註冊上去,但是最近開發的需要每天在測試上跑跑看,再上生產,所以這次要解決掉。 問題描述 我是測試環境和正式環境都在一臺機子上,兩個環境項目跑不同的docker容器,我要做的是這兩個容器裡面的項目都註冊到我的xxl服務上去。 而且之前情況是 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...