mPDF的简单使用
1. 基本使用
安装
1 在项目下composer文件中 添加 "mpdf/mpdf":"~7.1.9" 测试环境为Yii项目 其他框架composer安装大同小异
"require": {
这里是其它扩展
"mpdf/mpdf":"~7.1.9"
},
然后在bash命令行执行
composer update mpdf/mpdf
安装完毕之后打开mpdf文件夹下这些目录的写权限
src/
tmp/
ttfonts/
在controller中使用
use Mpdf\Mpdf; //yii中获取 html 的方法 PDFHtml为需要转换的html文件 $data为动态展示的数据
$html = "抓取html页面作为字符串赋值到$html中使用 例如:<h1>我是html中的一个标题</h1> 可以直接使用file_get_content()获取";
$mpdf = new Mpdf();
//设置中文字体
$mpdf->autoScriptToLang = true;
$mpdf->autoLangToFont = true;
$mpdf->WriteHTML($html); //直接展示
$mpdf -> Output();
//保存文件
$mpdf -> Output('路径和文件名称.pdf');
2.基本定制化使用
安装
官方手册中安装方法为composer安装 Packagist php扩展包库地址 https://packagist.org/packages/mpdf/mpdf
截止到2019年5月 mpdf版本更新到8.0.1>,主要大版本为6~. 7~. 8~
6~版本 php版本要求为5.4-7.0,版本不符会报错,不需要php扩展依赖
7~版本 php版本要求为5.6- 7.2,需要php扩展支持 gd库与mbstring库
8~版本 php版本要求为5.6-7.3,需要php扩展支持 gd库与mbstring库,php版本高可以试下。目前官方文档支持到7.1.
更改目录权限
7~版本需要打开mpdf文件夹下
src/
tmp/
ttfonts/
的目录写权限。
6~版本打开
ttfontdata/
tmp/
graph_cache/
写权限。
使用
引用方法大版本有明显差异
//6~版本
use mpdf;
$mpdf=new mPDF();
//7~版本
use Mpdf\Mpdf;
$mpdf = new mPDF();
$mpdf = new Mpdf();
属性设置及方法参数
1.输出方法 Output()
$mpdf = new \Mpdf\Mpdf();
$mpdf->WriteHTML('Hello World');
$name = "路径和文件名称.pdf"; 1 直接展示在浏览器页面
$mpdf->Output(); 2 以文件形式保存到服务器
$mpdf->Output( $name ); 3 带第二个参数
$mpdf->Output( $name , "F"); //服务器保存以$name为名称的文件
$mpdf->Output( $name , "D"); //浏览器下载以$name为名称的文件
$mpdf->Output( $name , "S"); //以字符串形式返回 $name忽略
$mpdf->Output( $name , "I"); //浏览器展示,但当用户另存为时以$name为默认文件名
2.写入方法 WriteHTML()
$mpdf->WriteHTML( $html , 0 ); //默认 以html为标准分析写入内容
$mpdf->WriteHTML( $css , 1 ); //会以style样式录入写入内容 等同于<style></style>标签中的内容
$mpdf->WriteHTML( $body , 2 ); //会以html body体形式录入写入内容 等同于<body></body>标签内的内容
$mpdf->WriteHTML( $thml , 0 ); //默认 以html为标准
自动分析录入内容字体
$mpdf->autoScriptToLang = true;
$mpdf->autoLangToFont = true;
4.加水印
$mpdf->SetWatermarkImage('../web/static/img/water-min.png',1);//参数一是图片的位置(图片相对目录 为处理脚本的相对目录),参数二是透明度0.1-1
$mpdf->showWatermarkImage = true;
5.设置页眉页脚
//设置PDF页眉内容
$header='<table width="95%" style="margin:0 auto;border-bottom: 1px solid #4F81BD; vertical-align: middle; font-family:serif; font-size: 9pt; color: #000088;"><tr>
<td width="10%"></td><td width="80%" align="center" style="font-size:16px;color:#A0A0A0">页眉</td>
<td width="10%" style="text-align: right;"></td></tr></table>'; //设置PDF页脚内容
在页脚html中添加 {PAGENO}/{nb} (当前页/总页数) 可添加页码
$footer='<table width="100%" style=" vertical-align: bottom; font-family:serif; font-size: 9pt; color: #000088;"><tr style="height:30px"></tr><tr>
<td width="10%"></td><td width="80%" align="center" style="font-size:14px;color:#A0A0A0">页脚</td>
<td width="10%" style="text-align: left;">页码:{PAGENO}/{nb}</td></tr></table>'; $mpdf->SetHTMLHeader($header);
$mpdf->SetHTMLFooter($footer);
6.合并多张PDF
$mpdf = new Mpdf();
$mpdf->SetImportUse();
//单页pdf导入方式
$pagecount = $mpdf->SetSourceFile('单页PDF地址');
$tplId = $mpdf->ImportPage(1);
$mpdf->UseTemplate($tplId);
$mpdf->WriteHTML('');
//多页pdf导入方式
$pagecount = $mpdf->SetSourceFile('多页PDF地址');
for ($i=1;$i<=$pagecount;$i++) {
$mpdf->AddPage();
$tplId = $mpdf->ImportPage($i);
$mpdf->UseTemplate($tplId);
$mpdf->WriteHTML('');
}
$mpdf->Output($outPut);
7.关于字体设置
//获取mpdf扩展字体配置文件目录(此处路径需要根据项目空间规则修改 例如我的是设置了命名空间 Mpdf为composer use引用所以使用绝对路径) $defaultConfig = (new \Mpdf\Config\ConfigVariables())->getDefaults();
$fontDirs = $defaultConfig['fontDir']; //获取mpdf扩展字体配置文件配置信息 $defaultFontConfig = (new \Mpdf\Config\FontVariables())->getDefaults();
$fontData = $defaultFontConfig['fontdata']; $mpdf = new \Mpdf\Mpdf([
'fontDir' => array_merge($fontDirs, [
__DIR__ ,//此处的路径为你ttf文件存放目录
]),
'fontdata' => $fontData + [
'msyh' => [
'R' => 'msyh.ttf',//此处为你从字体网站下载的想要显示的字体
'I' => 'msyh.ttf',
]
],
'default_font' => 'msyh'
]); $mpdf->SetFont('msyh'); //设置你要使用的字体配置名称 //注意如此设置需要注释掉
//$mpdf->autoScriptToLang = true;
//$mpdf->autoLangToFont = true;
8.关于中文符号在数字后面乱码的问题
个别字体会出现数字后面的中文字符出现乱码情况,目前没有很好的解决方式,只列举一个简单方式:使用gb字体显示中文字符 例如要显示:【213456789】 <span style:"font-family:自定义字体;">【123456798<span style="font-family: gb;">】</span></span>
更多方法参照官方文档
http://mpdf.github.io/reference/mpdf-functions/overview.html
mPDF的简单使用的更多相关文章
- mpdf中文开发使用文档附demo实例
官网URL:http://www.mpdf1.com/mpdf/index.php github:https://github.com/mpdf/mpdf 官方开发手册,英文的:http://www. ...
- PHP 导出简单文本内容(word txt等)
PHP导出word文件,简单拓展可导出其他文本类文件 /** * PHP 导出简单文本内容(word txt等) * @param $content mixed 导出内容 (文本string / ht ...
- mpdf与fpdf的使用比较
php扩展 ---mpdf/fpdf 最近用到pdf扩展,需求是生成合同与简历的pdf,可供下载打印 mpdf 首先接触的是mpdf,从源码可以看出mpdf是基于fpdf与html2fpdf的成果. ...
- 【造轮子】打造一个简单的万能Excel读写工具
大家工作或者平时是不是经常遇到要读写一些简单格式的Excel? shit!~很蛋疼,因为之前吹牛,就搞了个这东西,还算是挺实用,和大家分享下. 厌烦了每次搞简单类型的Excel读写?不怕~来,喜欢流式 ...
- Fabio 安装和简单使用
Fabio(Go 语言):https://github.com/eBay/fabio Fabio 是一个快速.现代.zero-conf 负载均衡 HTTP(S) 路由器,用于部署 Consul 管理的 ...
- node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理
一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...
- 哪种缓存效果高?开源一个简单的缓存组件j2cache
背景 现在的web系统已经越来越多的应用缓存技术,而且缓存技术确实是能实足的增强系统性能的.我在项目中也开始接触一些缓存的需求. 开始简单的就用jvm(java托管内存)来做缓存,这样对于单个应用服务 ...
- 在Openfire上弄一个简单的推送系统
推送系统 说是推送系统有点大,其实就是一个消息广播功能吧.作用其实也就是由服务端接收到消息然后推送到订阅的客户端. 思路 对于推送最关键的是服务端向客户端发送数据,客户端向服务端订阅自己想要的消息.这 ...
- 我的MYSQL学习心得(一) 简单语法
我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
随机推荐
- 在react项目添加看板娘(react-live2d)
有留意到看板娘这么个东西,简直就是我们程序员+动漫迷的挚爱.但是回观网上,大多只是在老旧的html的静态引入.vue甚至也有几个不怎么维护的,还是老旧的不行的SDK2.X的版本.这这这这!我们的rea ...
- Java SPI详细的例子
先翻一个来自于Baeldung的介绍: 为了更通俗易懂我就没有直译,如果有不严谨的地方请大神指教. JavaSPI的定义 Java SPI defines four main components S ...
- 腾讯云COS对象存储 Web 端直传实践(JAVA实现)
使用 腾讯云COS对象存储做第三方存储云服务,把一些文件都放在上面,这里主要有三中实现方式:第一种就是在控制台去设置好,直接上传文件.第二种就是走服务端,上传文件,就是说,上传文件是从服务端去上传上去 ...
- SSM框架整合核心内容
所需要的jar包及其版本 Spring 版本:4.3.18 tx.aop.beans.core.web.web-mvc.context.expression.jdbc MyBatis:3.4.6 ...
- 使用singleflight防止缓存击穿(Java)
缓存击穿 在使用缓存时,我们往往是先根据key从缓存中取数据,如果拿不到就去数据源加载数据,写入缓存.但是在某些高并发的情况下,可能会出现缓存击穿的问题,比如一个存在的key,在缓存过期的一刻,同时有 ...
- Erlang+RabbitMQ Server的详细安装
Erlang(['ə:læŋ])是一种通用的面向并发的编程语言, 它有瑞典电信设备制造商爱立信所辖的CS-Lab开发,目的是创造一种可以应对大规模并发活动的编程语言和运行环境. Erlang官网:ht ...
- MyBatis常用实现方式
MyBatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身,而不需要花费精力去处理加载驱动.创建连接.创建 statement 等繁杂的过程 ...
- Python接口自动化测试01
1)环境准备: 接口测试的方式有很多,比如可以用工具(jmeter,postman)之类,也可以自己写代码进行接口测试,工具的使用相对来说都比较简单,重点是要搞清楚项目接口的协议是什么,然后有针对性的 ...
- powershell编程实例-001-生成指定大小的null/zero文件或随机文件
NULL文件,也有的称为zero文件,即全是二进制/十六进制的0文件 在powershell 中可以按如下方法生成指定大小的zero文件: 只需要修改大小即可,格式如3MB,或者2GB $tempFi ...
- python-数组+递归实现简单代数式运算
#!/usr/bin/env python3# -*- coding: utf-8 -*-#思路: #代数式是为字符串 #先将字符串处理为数值与运算符号的数组 #逐项读入数组 #每一次处理不少过两个变 ...