lexinek/mpdf

此包已被放弃,不再维护。未建议替代包。

一个PHP类,用于从HTML生成支持Unicode/UTF-8和CJK的PDF文件

6.1.5 2017-01-18 03:08 UTC

README

mPDF是一个PHP类,可以从UTF-8编码的HTML生成PDF文件。它基于FPDFHTML2FPDF(见CREDITS),并添加了一些增强功能。mPDF由Ian Back编写,并按照GNU GPL v2许可证发布。

Build Status

安装

  • 下载.zip文件并解压缩

  • 在服务器上创建一个文件夹,例如/mpdf

  • 上传所有文件到服务器,保持文件夹结构不变

  • 确保以下文件夹有写权限设置(CHMOD 6xx或7xx)

    /ttfontdata/ - 用于缓存字体数据;大幅提高性能

    /tmp/ - 用于一些图片和ProgressBar

    /graph_cache/ - 如果您正在将JpGraph与mPDF结合使用

要测试安装,请将浏览器指向基本示例文件

[path_to_mpdf_folder]/mpdf/examples/example01_basic.php

如果您希望将临时文件目录指定为非/tmp/,请参阅临时文件目录中的说明,在手册的安装和设置部分。

如果您遇到问题,请阅读手册中故障排除部分。

字体

以下我们将以两种方式引用字体名称

  1. "CSS字体家族名称" - mPDF主要设计用于读取HTML和CSS。这是CSS中使用的名称,例如。

    <p style="font-family: 'Trebuchet MS';">

  2. "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将尝试为任何缺失的字符找到替换项

  1. 首先检查字符是否在内置的符号或ZapfDingbats字体中可用;
  2. [如果已定义]在每个由 $this->backupSubsFont 数组设置的字体中查找

注意:使用替换时,处理时间会增加,如果定义了backupSubsFont,则增加更多。

控制mPDF模式

new mPDF('')的第一个参数工作如下

  • new mPDF('c') - 强制mPDF只使用内置[c]ore Adobe字体(Helvetica,Times等)

  • new mPDF('') - 默认 - 字体子集化行为由可配置变量 $this->maxTTFFilesize 和 $this->percentSubset(见下文)确定

    默认值已设置,以便

    1. 非常大的字体文件始终子集化
    2. 如果使用的字符少于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文件在单元测试时都将自动加载。