忽然之间的博客

Thoughts, stories and ideas.

PHP使用Dompdf

PHP使用dompdf用来生成PDF文件,比较稳定的有两个版本,README文档写的有点乱,以亲测调用成功的方式跟着做,一定可以成功。

当前版本为0.8.2,还有0.6,类库结构有很大区别。网上不少文章都是旧的,当前文章是以0.8.2版本为准写的。

Requirements 依赖关系

PHP version 5.4.0 or higher
DOM extension
GD extension
MBString extension
php-font-lib
php-svg-lib

在当前项目里安装

composer require dompdf/dompdf

目录结构如下

├── dompdf
│   └── dompdf
└── dompdf
    ├── composer.json
    ├── CONTRIBUTING.md
    ├── lib
    │   ├── Cpdf.php
    │   ├── fonts
    │   ├── html5lib
    │   └── res
    ├── LICENSE.LGPL
    ├── phpcs.xml
    ├── README.md
    ├── src
    └── VERSION
├── phenx
│   ├── php-font-lib
│   └── php-svg-lib

使用


use Dompdf\Dompdf; // instantiate and use the dompdf class $dompdf = new Dompdf(); $dompdf->loadHtml('hello world'); // (Optional) Setup the paper size and orientation $dompdf->setPaper('A4', 'landscape'); // Render the HTML as PDF $dompdf->render(); // Output the generated PDF to Browser $dompdf->stream();

PDF需要支持中文,还需要折腾一下,我亲测通过的方式介绍一下。

1、下载微软雅黑字体 msyh.ttf

2、下载load_font.php,这个脚本用来安装中文字体,很奇怪为啥不在dompdf包内包含这个脚本。

git clone  https://github.com/dompdf/utils.git

把 utils/load_font.php 拷贝到当前项目和vendor同级目录

├── load_font.php
├── msyh.ttf
├── vendor
# 安装字库
php load_font.php "yahei" msyh.ttf

# 终端输出内容示例
Unable to find bold face file.
Unable to find italic face file.
Unable to find bold_italic face file.
Copying msyh.ttf to /home/vagrant/Code/GitPro/artisanyii/vendor/dompdf/dompdf/lib/fonts/msyh.ttf...
Generating Adobe Font Metrics for /home/vagrant/Code/GitPro/artisanyii/vendor/dompdf/dompdf/lib/fonts/msyh...

安装字体和字体缓存配置文件会自动生成

├── fonts
│   ├── dompdf_font_family_cache.dist.php
│   ├── dompdf_font_family_cache.php
│   ├── msyh.ttf
│   ├── msyh.ufm
│   ├── msyh.ufm.php
# /vendor/dompdf/dompdf/lib/fonts/dompdf_font_family_cache.php
<?php return array (
  'sans-serif' => array(
    'normal' => $fontDir . '/Helvetica',
    'bold' => $fontDir . '/Helvetica-Bold',
    'italic' => $fontDir . '/Helvetica-Oblique',
    'bold_italic' => $fontDir . '/Helvetica-BoldOblique',
  ),
  'times' => array(
    'normal' => $fontDir . '/Times-Roman',
    'bold' => $fontDir . '/Times-Bold',
    'italic' => $fontDir . '/Times-Italic',
    'bold_italic' => $fontDir . '/Times-BoldItalic',
  ),
  //...
  'yahei' => array(
    'normal' => $fontDir . '/msyh',
    'bold' => $fontDir . '/msyh',
    'italic' => $fontDir . '/msyh',
    'bold_italic' => $fontDir . '/msyh',
  ),
) ?>

示例代码 支持中文字体

use Dompdf\Dompdf;

$dompdf = new Dompdf();
$dompdf->set_option('defaultFont', 'yahei');     # 这行是设置字体, ‘yahei’是我们安装的微软雅黑字体
$dompdf->loadHtml('hello world中文');

// (Optional) Setup the paper size and orientation
$dompdf->setPaper('A4', 'landscape');

// Render the HTML as PDF
$dompdf->render();

// Output the generated PDF to Browser
$dompdf->stream(null, ['Attachment' => 0]);