appotter / mpdf
一个用于从HTML生成具有Unicode/UTF-8和CJK支持的PDF文件的PHP类
Requires
- php: >=5.0.3
- ext-mbstring: *
- appotter/jpgraph: ~4
This package is not auto-updated.
Last update: 2024-09-14 16:36:38 UTC
README
mPDF是一个PHP类,可以从UTF-8编码的HTML生成PDF文件。它基于FPDF和HTML2FPDF(见贡献者),增加了许多功能。mPDF由Ian Back编写,并使用GNU GPL v2许可证发布。
版本
- [20170707] 更新jpgraph到新版本(4.0.2)
安装
-
下载.zip文件并解压缩
-
在您的服务器上创建一个文件夹,例如/mpdf
-
上传所有文件到服务器,保持文件夹结构不变
-
确保您已为以下文件夹设置写入权限(CHMOD 6xx或7xx)
/ttfontdata/ - 用于缓存字体数据;大幅提高性能
/tmp/ - 用于某些图像和ProgressBar
/graph_cache/ - 如果您与JpGraph一起使用mPDF
为了测试安装,请将您的浏览器指向基本示例文件
[path_to_mpdf_folder]/mpdf/examples/example01_basic.php
如果您希望为临时文件定义不同的文件夹而不是/tmp/,请参阅临时文件文件夹部分中的说明,该部分位于手册的安装和设置部分。
如果您遇到问题,请阅读手册中故障排除部分。
字体
让我们以两种方式来引用字体名称
-
"CSS字体家族名称" - mPDF主要设计用于读取HTML和CSS。这是在CSS中使用的名称,例如。
<p style="font-family: 'Trebuchet MS';">
-
"mPDF字体家族名称" - 内部处理字体时使用的名称。这可以是任何您喜欢的名称,但默认情况下,mPDF将通过删除任何空格并将其转换为小写来转换CSS字体家族名称。阅读上面的名称,mPDF将查找以下“mPDF字体家族名称”
'trebuchetms'
下面提到的可配置值在config_fonts.php文件中设置。
在解析HTML/CSS时,mPDF将读取CSS字体家族名称(例如'Trebuchet MS')并转换,删除任何空格并将其转换为小写,以查找mPDF字体家族名称(trebuchetms)。
接下来,它将在config_font.php中查找(如果已设置)翻译。
$this->fonttrans = array(
'trebuchetms' => 'trebuchet'
)
现在要使用的mPDF字体家族名称是'trebuchet'。
如果您希望使用此字体,您需要指定每个变体的TrueType .ttf字体文件。这些应在config_font.php中的数组中定义
$this->fontdata = array(
"trebuchet" => array(
'R' => "trebuc.ttf",
'B' => "trebucbd.ttf",
'I' => "trebucit.ttf",
'BI' => "trebucbi.ttf",
)
)
这是确定字体是否可用于mPDF的数组。每个字体家族都必须定义一个Regular ['R']文件 - 其他(粗体、斜体、粗体斜体)是可选的。
mPDF将尝试加载字体文件。如果您在config_fonts.php文件顶部定义了_MPDF_SYSTEM_TTFONTS,它将首先在那里查找字体文件。如果您在计算机上运行mPDF,并且该计算机上已经有包含TTF字体的文件夹(例如Windows上),这很有用。
如果字体文件不在那里,或未定义_MPDF_SYSTEM_TTFONTS,mPDF将在以下文件夹中查找
/[your_path_to_mpdf]/ttfonts/
注意,字体文件名称区分大小写,可以包含大写字母。
如果文件夹 /ttfontdata/ 可写(CHMOD 644 或 755),mPDF 将在此处保存文件,下次访问特定字体时可以重用。这将显著提高处理时间,强烈推荐。
mPDF 应该能够读取大多数具有 .ttf 扩展名的 TrueType Unicode 字体文件。具有 .otf 扩展名的 OpenType TrueType 字体也运行良好。如果包含 TrueType Unicode 字体,TrueType 集合 (.ttc) 也可以工作。
字符替换
大多数人都可以访问包含大多数 Unicode 字符的全Unicode字体,如 Arial Unicode MS。在 config_fonts.php 文件顶部设置,在替换特定字体中找不到的任何字符时使用此字体。
$this->backupSubsFont = array('arialunicodems');
示例:
在运行时设置,或在
$mpdf->useSubstitutions = true;
config.php 文件中
$this->useSubstitutions = true;
此文本包含一个 Thai 字符 ม,该字符在 Comic Sans MS 字体文件中不存在
当 useSubstitutions 为 true 时,mPDF 将尝试找到任何缺失字符的替换
首先检查字符是否在内置的符号或 ZapfDingbats 字体中可用;
- (如果已定义)在 $this->backupSubsFont 数组设置的字体中查找每个字体;
- 注意:使用替换时,处理时间会增加,如果定义了 backupSubsFont,则增加更多。
控制 mPDF 模式
new mPDF('') 的第一个参数作用如下:
new mPDF('c') - 强制 mPDF 只使用内置 [c]ore Adobe 字体(Helvetica,Times 等)
-
new mPDF('') - 默认 - 字体子集行为由可配置变量 $this->maxTTFFilesize 和 $this->percentSubset 决定(见下文)
-
默认值设置为:
非常大的字体文件始终子集化
- 如果使用的字符少于 30%,字体将作为子集嵌入
- new mPDF('..+aCJK')
-
new mPDF('+aCJK')
new mPDF('..-aCJK')
new mPDF('-aCJK')
new mPDF('+aCJK')
可选地与语言或语言/国家代码一起使用,+aCJK 将强制 mPDF 在例如 "lang: ja" 标记的段落中使用 Adobe 非嵌入的 CJK 字体
这可以在运行时用于覆盖 config.php 中为 $mpdf->useAdobeCJK 设置的值
与 config_cp.php 中的设置一起使用
为了向后兼容,new mPDF('-s') 和 new mPDF('s') 将通过设置强制子集化
$this->percentSubset=100
new mPDF('utf-8-s') 和 new mPDF('ar-s') 也被认可
配置变量已更改
配置变量在在线 手册 中有文档说明。
字体文件夹
如果您想定义自己的字体文件文件夹(可能是为了共享),您可以在包含 mpdf.php 脚本之前在您的脚本中定义这两个常量,例如。
define('_MPDF_TTFONTPATH','your_path/ttfonts/');
define('_MPDF_TTFONTDATAPATH','your_path/ttfontdata/'); // should be writeable