lexinek / mpdf
一个PHP类,用于从HTML生成支持Unicode/UTF-8和CJK的PDF文件
Requires
- php: >=4.3.10
- ext-mbstring: *
Replaces
- mpdf/mpdf: *
README
mPDF是一个PHP类,可以从UTF-8编码的HTML生成PDF文件。它基于FPDF和HTML2FPDF(见CREDITS),并添加了一些增强功能。mPDF由Ian Back编写,并按照GNU GPL v2许可证发布。
安装
-
下载.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字体家族名称(trebuchetms)。
'trebuchetms'
以下可配置的值在config_fonts.php文件中设置。
当解析HTML/CSS时,mPDF将读取CSS字体家族名称(例如'trebuchetms')并通过删除任何空格并将其转换为小写来转换,以查找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的真型Unicode字体文件。扩展名为.otf的OpenType真型字体也可以正常工作。如果TrueType集合(.ttc)包含真型Unicode字体,也可以正常工作。
字符替换
大多数人将能够访问包含大多数Unicode字符的全Unicode字体,如Arial Unicode MS。将
$this->backupSubsFont = array('arialunicodems');
放置在config_fonts.php文件顶部,以便在替换特定字体中找不到的任何字符时使用此字体。
示例:
$mpdf->useSubstitutions = true;
在运行时设置,或者
$this->useSubstitutions = true;
在config.php文件中设置
此文本包含一个不存在于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')
可选地与语言或语言/国家代码一起使用,+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脚本之前在您的脚本中定义2个常量,例如。
define('_MPDF_TTFONTPATH','your_path/ttfonts/');
define('_MPDF_TTFONTDATAPATH','your_path/ttfontdata/'); // should be writeable
单元测试
对于mPDF的单元测试使用PHPUnit进行。
要开始,请在mPDF根目录下通过命令行运行composer install
(首先需要安装composer)。
要执行测试,请在mPDF的/tests/
目录下通过命令行运行../vendor/bin/phpunit
。
对于编写mPDF单元测试的任何帮助都非常欢迎。如果您想帮忙,请注意,任何位于/tests/
目录下的PHP文件在单元测试时都将自动加载。