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

白俊遥博客


白俊遥博客
请先登陆后发表评论
  • 最新评论
  • 总共10条评论
白俊遥博客

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

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

白俊遥博客

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

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

白俊遥博客
  • 云淡风晴 回复 Cookie: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 回复
白俊遥博客

阿小:$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 回复

白俊遥博客
  • 云淡风晴 回复 orz...:我咋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 回复