appotter/mpdf

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

6.0.7 2017-07-07 10:07 UTC

README

mPDF是一个PHP类,可以从UTF-8编码的HTML生成PDF文件。它基于FPDFHTML2FPDF(见贡献者),增加了许多功能。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/,请参阅临时文件文件夹部分中的说明,该部分位于手册的安装和设置部分。

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

字体

让我们以两种方式来引用字体名称

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

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

  2. "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 字体中可用;

  1. (如果已定义)在 $this->backupSubsFont 数组设置的字体中查找每个字体;
  2. 注意:使用替换时,处理时间会增加,如果定义了 backupSubsFont,则增加更多。

控制 mPDF 模式

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

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

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

  • 默认值设置为:

    非常大的字体文件始终子集化

    1. 如果使用的字符少于 30%,字体将作为子集嵌入
    2. 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