php生成pdf文件——在laravel框架中dompdf的使用

php生成pdf文件

  • 前序
  • 前期准备
  • 代码实现
    • 安装dompdf
    • 加载中文字体库( 防止中文乱码 )
    • 加载外部图片
    • 渲染模板数据
    • 生成pdf
    • 其他方面
  • 注意事项
  • 参考文献及个人博客
  • 局限性
  • 博主声明

前序

该篇主要讲述的是使用PHP是生成pdf文件,选用了Packagist中使用率最高的 dompdf 来满足我们的需求

请先通篇阅读本文,然后在完成功能需求

前期准备

1.主体框架:laravel 版本5.8
2.使用工具包 :

  • dompdf 实现pdf功能的主体工具包
  • load_font.php 和 autoload.inc.php 加载字体文件
  • 字体文件(自行下载)

代码实现

安装dompdf

1
composer require dompdf/dompdf

加载中文字体库( 防止中文乱码 )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 下载 git clone  https://github.com/dompdf/utils.git
 
 复制 load_font.php到 dompdf目录中,与lib 和 src 目录同级。
 
 下载中文字体,推荐下载 Droid Sans Fallback 字体,下载链接 http://www.17ziti.com/info/71250.html
 也可用雅黑字体 (我本人使用的微软雅黑),【雅黑字体会导致导出文档过大】
 
将字体文件放在指定位置(本人放在了public下面的字体文件夹)

执行下列语句(注意执行语句时所处文件位置)
php vendor/dompdf/dompdf/load_font.php 'msyh' public/font//msyh.ttf
此时 vendor/dompdf/dompdf/lib/fonts 下会出现你的字体文件

模板页面渲染
@font-face{
      font-family:msyh;
  }
  body {

      font-family:msyh;
      margin: 0 auto;
  }

在这里插入图片描述
在这里插入图片描述
执行后语句后,目录下会出现字体文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

加载外部图片

1
2
3
4
5
修改Option配置文件的配置项
路径 vender/dompdf/dompdf/src/Options.php

修改以下配置(测试成功需清除页面缓存文件)
private $isRemoteEnabled = true;

渲染模板数据

将你要生成的pdf数据渲染到模板上(根据需求渲染样式)
在这里插入图片描述

生成pdf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
引用 dompdf 软件包
use Dompdf\Dompdf;

获取模板页面
$html = view('pdf.artworks')->with('artworks',$artworks);
$html = response($html)->getContent();

生成pdf
$dompdf = new Dompdf();
$dompdf->loadHtml($html);
$dompdf->setPaper('A4', 'landscape');
$dompdf->render();
$name = "artworks".time().".pdf";
$dompdf->stream($name);

其他方面

除修改配置参数外,还可使用option方法来实现其他的参数配置
使用范例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
**使用 Options 类**
use Dompdf\Dompdf;
use Dompdf\Options;

$options = new Options();
$options->set('defaultFont', 'Courier');
$dompdf = new Dompdf($options);

**或使用 getOptions 方法**
use Dompdf\Dompdf;

$dompdf = new Dompdf();
$options = $dompdf->getOptions();
$options->setDefaultFont('Courier');
$dompdf->setOptions($options);

注意事项

1.处理大多数CSS 2.1和一些CSS3属性,并不能适用所有除css3属性
2.支持大多数演示HTML 4.0属性,html标签使用需谨慎
3.中文字体需引入中文字体库,软件包本身不携带
4.显示图片需修改配置
5.中文换行需自行处理

参考文献及个人博客

dompdf 的 packagist 地址
dompdf 的 github 地址
dompdf 项目
Ann子尘 的 OSCHINA 地址

局限性

  • Dompdf对格式不正确的HTML输入不是特别宽容。为避免任何意外的呈现问题,您应该在运行时($dompdf->set_option(‘isHtml5ParserEnabled’, true);)启用内置HTML5解析器,或者通过HTML验证器/清理器(例如Tidy或 W3C标记验证服务)运行HTML 。
  • 表格单元不可分页,这意味着表格行必须适合单个页面。
  • 元素在解析后呈现在活动页面上。

博主声明

本文是本人踩坑过程,所涉及方面并不全面,若有其他想法或补充请留言联系,希望认识更多的朋友并与之共同进步