thinkphp整合系列之tcpdf类生成pdf文件

php生成pdf文件的需求是不怎么常见的;当然也是有的;
既然已经整合使用了;那就写篇博客来讲解下吧;
示例项目:https://github.com/baijunyao/thinkphp-bjyadmin
一:引入tcpdf
/ThinkPHP/Library/Vendor/Tcpdf
把tcpdf整个目录拷到自己的项目中;
二:函数
/Application/Common/Common/function.php

/**
 * 生成pdf
 * @param  string $html      需要生成的内容
 */
function pdf($html='<h1 style="color:red">hello word</h1>'){
    vendor('Tcpdf.tcpdf');
    $pdf = new \\Tcpdf(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
    // 设置打印模式
    $pdf->SetCreator(PDF_CREATOR);
    $pdf->SetAuthor('Nicola Asuni');
    $pdf->SetTitle('TCPDF Example 001');
    $pdf->SetSubject('TCPDF Tutorial');
    $pdf->SetKeywords('TCPDF, PDF, example, test, guide');
    // 是否显示页眉
    $pdf->setPrintHeader(false);
    // 设置页眉显示的内容
    $pdf->SetHeaderData('logo.png', 60, 'baijunyao.com', '白俊遥博客', array(0,64,255), array(0,64,128));
    // 设置页眉字体
    $pdf->setHeaderFont(Array('dejavusans', '', '12'));
    // 页眉距离顶部的距离
    $pdf->SetHeaderMargin('5');
    // 是否显示页脚
    $pdf->setPrintFooter(true);
    // 设置页脚显示的内容
    $pdf->setFooterData(array(0,64,0), array(0,64,128));
    // 设置页脚的字体
    $pdf->setFooterFont(Array('dejavusans', '', '10'));
    // 设置页脚距离底部的距离
    $pdf->SetFooterMargin('10');
    // 设置默认等宽字体
    $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
    // 设置行高
    $pdf->setCellHeightRatio(1);
    // 设置左、上、右的间距
    $pdf->SetMargins('10', '10', '10');
    // 设置是否自动分页  距离底部多少距离时分页
    $pdf->SetAutoPageBreak(TRUE, '15');
    // 设置图像比例因子
    $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
    if (@file_exists(dirname(__FILE__).'/lang/eng.php')) {
        require_once(dirname(__FILE__).'/lang/eng.php');
        $pdf->setLanguageArray($l);
    }
    $pdf->setFontSubsetting(true);
    $pdf->AddPage();
    // 设置字体
    $pdf->SetFont('stsongstdlight', '', 14, '', true);
    $pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true);
    $pdf->Output('example_001.pdf', 'I');
}

三:使用方法
好吧;这个没什么好说的了;全写注释里面了;
更多栗子:/ThinkPHP/Library/Vendor/Tcpdf/examples
需要注明的就是:

  1. 可以写html标签的;比如说是识别h标签的字体加粗加大效果的;

  2. 可以写style样式;但是并不能完全支持;

  3. tcpdf的官网需要自带梯子:http://www.tcpdf.org
    白俊遥博客

白俊遥博客
请先登录后发表评论
  • latest comments
  • 总共35条评论
白俊遥博客

kuhn554 :请问下,pdf导出数据上千条的时候服务器直接超时然后崩了,怎么破 T_T  调试是在addpage 

2018-07-12 18:12:51 回复

白俊遥博客 白俊遥博客

云淡风晴 :设置超时时间;

2018-07-22 23:15:05 回复

白俊遥博客

kuhn554 :超时时间不顶用老哥,数据量上万条我想到的解决方案是格式控制符拼接字符串 然后原样write出来 不然writeHTMLCell太慢啦 一万多条要估计半天一天的 除了这个并没有想到更好的方法了

2018-07-23 09:07:40 回复

白俊遥博客

kuhn554 :超时时间不顶用老哥,数据量上万条我想到的解决方案是格式控制符拼接字符串 然后原样write出来 不然writeHTMLCell太慢啦 一万多条要估计半天一天的 除了这个并没有想到更好的方法了

2018-07-23 09:08:42 回复

白俊遥博客

♚Autism♚ :生成pdf自动保存到本地不要让我确认下载,请问要怎么写

2017-09-27 15:26:07 回复

白俊遥博客

♚Autism♚ :生成pdf自动保存到本地不要让我确认下载

2017-09-27 15:25:12 回复

白俊遥博客

Crazy丶导演 :帅白,我这要保存pdf到本地为什么一直报TCPDF ERROR: Unable to create output file: Public/ppdf/test.pdf的错误啊?不保存本地的话手机APP预览会乱码是什么情况?

2017-06-08 09:52:33 回复

白俊遥博客

Crazy丶导演 :打扰了帅白,解决了,在用FD模式的时候不能使用中文....

2017-06-08 10:14:33 回复

白俊遥博客

gdcgit :// 设置图像比例因子 $pdf->{ ;

2017-05-15 22:38:55 回复

白俊遥博客

◆◇想这样 简简单单 :大神,我使用

2017-02-13 23:46:46 回复

白俊遥博客

、我守一座空城 :你好  请问下 TCPDF ERROR: Some data has already been output, can't send PDF file   出现这个错误怎么解决?  我是个新手

2016-12-06 15:12:40 回复

白俊遥博客 白俊遥博客

云淡风晴 :在输出前不能打印数据;

2016-12-11 22:31:47 回复

白俊遥博客

、我守一座空城 :好的   我知道了  谢谢 那再请问下 PDF的页眉和页脚内容是在哪里设定?你能给一个比较全的例子吗?

2016-12-13 09:46:31 回复

白俊遥博客 白俊遥博客

云淡风晴 :官方示例在这:https://tcpdf.org/examples

2016-12-22 23:09:02 回复

白俊遥博客

守护幸福 :在函数前加上ob_start(); 这个就可以了。

2016-12-28 15:15:15 回复

白俊遥博客

Cookie :你好  请问一下   前台框架  发给我一个JSO   里面有多张图片     要求我把多张图片换成PDF 存在本地  再把pdf文件地址存在数据库  用tp可以做吗

2016-12-02 13:03:02 回复

白俊遥博客 白俊遥博客

云淡风晴 :php可以搞定;这跟用不用tp没有关系;

2016-12-05 23:07:20 回复

白俊遥博客

文艺春秋 白俊遥博客

2016-09-24 14:31:08 回复

白俊遥博客

阿小 :请问下你联系方式,这个问题一直解决不了,请求帮忙

2016-09-23 15:12:01 回复

白俊遥博客 白俊遥博客

云淡风晴 :加你了;

2016-09-23 21:36:48 回复

白俊遥博客

博哥 :你好,白哥,能给个联系方式,小弟有点疑惑

2017-05-25 16:10:32 回复

白俊遥博客

阿小 :$font = new \BCGFontFile('font/Arial.ttf', 18);你好这里面的字体路径应该怎么写,一直报错

2016-09-23 13:53:24 回复

白俊遥博客

阿小 :这是function.php中的

2016-09-23 14:21:28 回复

白俊遥博客

阿小 :怎么生成code128条码,手机可以是别的,并以pdf格式输出,求白师兄帮忙

2016-09-22 18:00:03 回复

白俊遥博客 白俊遥博客

云淡风晴 :这有生成条形码的;你可以试试:http://www.barcodebakery.com/en

2016-09-22 22:52:56 回复

白俊遥博客

阿小 :怎么生成code128条码,手机可以是别的,并以pdf格式输出,求白师兄帮忙

2016-09-22 17:57:30 回复

白俊遥博客

香蕉你个banana :爱上对方过后就哭了

2016-08-26 11:14:27 回复

白俊遥博客

orz... :你好,请问怎么让他一点击就是下载pdf文件。$pdf->Output('filename.pdf', 'D'); 传D是一个死循环下载,第二参数传FD 会报一个Unable to create output file错误,我这里应该怎么解决呢。

2016-08-18 16:21:38 回复

白俊遥博客 白俊遥博客

云淡风晴 :我咋chrome和firefox中试了下D是可以直接下载的;你是用我整合的这个报错的么?用的什么浏览器?

2016-08-18 22:23:56 回复

白俊遥博客

南城阿牛 :博主你好,我是从github上追过来的^_^你的所有项目我都收藏了,非常感谢,我是一个php新手程序员,半年经验了,现在正在做一个项目类似于百度文库和道客巴巴的在线文档分享平台,基本功能就是用户注册登陆提交自己的文档,然后别的用户可以在线预览文档并付费下载。我这里遇到一个技术难点,就是把用户上传的不同格式的文档在线转化成flash预览,还要限制预览比例(比如30%)请问您有什么比较好的方法吗

2016-06-22 11:31:22 回复

白俊遥博客 白俊遥博客

云淡风晴 :感谢肯定;如果自己搭建的话;理论上首先是要把office文档转换成pdf文件;然后再把pdf转换成swf文件;需要用到OpenOffice、Flexpaper、pdf2swf  等;非常不好意思的是;我并没有实际的去实现过这样的功能;所以无法提供更多帮助了;

2016-06-22 14:13:31 回复

白俊遥博客

南城阿牛 :谢谢大哥的回复,我刚才收到你的回复邮件提醒了,这个blog源码我也搭建了,开始尝试自己学着做一个,感谢你的分享和回复对于文档预览这块,我正在按照这个方法尝试

2016-06-22 16:04:38 回复

白俊遥博客 白俊遥博客

云淡风晴 :不客气;祝你顺利;

2016-06-22 16:09:04 回复

白俊遥博客

Cookie :前台框架 把好几张图片给我 我就要直接生成pdf 保存在本地 把地址存在数据库 php可以写吗

2016-12-02 12:59:46 回复

白俊遥博客

阿拉川-名淘投资 白俊遥博客

2017-05-26 17:28:59 回复