php 实现 html 导出 PDF

最近在做一个OA系统,客户要求把财务管理模块的几个单据的导出PDF格式。因为项目是团队开发,我最后才实现自己的任务里的导出PDF功能,看了前面小伙伴实现的导出PDF功能案例,他们使用的是 fpdf 这个库。

考察过后,发现fpdf这个库不支持html导出pdf,不稳定,在 apache 环境下导出报错。我反馈问题给用fpdf做导出功能的小伙伴,他说他导出正常。最后我们对比了开发环境,他用的是 nginx ,我用的是 apache。这样的问题百度了一下没有答案,那就只能我自己去找问题的答案咯。经过不懈的努力,终于找到在 fpdf.php 这个文件下的 function Image 函数下一段代码:

/*************************此段代码有bug******在apache下****************************
if($w<0)
   $w = -$info['w']*72/$w/$this->k;
if($h<0)
   $h = -$info['h']*72/$h/$this->k;
**************************此段代码有bug***********************************/

   if($w<0) {
       $w = -(-$info['w'] * 72) / (-$w) / $this->k;
   }
   if($h<0) {
       $h = -(-$info['h'] * 72) / (-$h) / $this->k;
   }

修复了一下,在 apache 下就可以正常导出了。

最终因为fpdf不支持html导出PDF,我选用了 mpdf 这个库,很方便的就实现了 html 导出 pdf 的功能。

$pdf = new Mpdf(['mode'=>'UTF-8']);
$pdf->useAdobeCJK = true;
$pdf->autoLangToFont = true;
$pdf->autoScriptToLang = true;
$fileContent = $this->fetch($this->templatePath.'pdf/travel_cost_apply');
$pdf->AddPage();
$pdf->WriteHTML($fileContent);
$pdf->Output('差旅费用报销-'.$modelView['apply_user_name'].'-'.date('Y-m-d',$modelView['apply_time']).'.pdf','D');

102802_UKrJ_2476796.png

104527_r1gu_2476796.png

104602_DBHF_2476796.png

104656_YSph_2476796.png

如有疑问,欢迎加入QQ群:591528130(互联网项目帮) ,一起讨论交流学习。

原创作者:动雪飞飞,QQ:282130106 。

如有转载,敬请注明原创作者与出处,谢谢。

转载于:https://my.oschina.net/u/2476796/blog/1575670

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用第三方库如TCPDF或mPDF实现PHP中将网页导出PDF文件。 以下是使用TCPDF实现的示例代码: ```php <?php require_once('tcpdf/tcpdf.php'); // 创建PDF对象 $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); // 设置文档信息 $pdf->SetCreator(PDF_CREATOR); $pdf->SetAuthor('作者'); $pdf->SetTitle('标题'); $pdf->SetSubject('主题'); $pdf->SetKeywords('关键词'); // 设置页眉和页脚信息 $pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING); $pdf->setFooterData(array(0,64,0), array(0,64,128)); // 设置页眉和页脚字体 $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); // 设置默认字体 $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); // 设置间距 $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); $pdf->SetHeaderMargin(PDF_MARGIN_HEADER); $pdf->SetFooterMargin(PDF_MARGIN_FOOTER); // 设置自动分页 $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); // 设置图像比例因子 $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); // 设置字体 $pdf->SetFont('stsongstdlight', '', 14); // 将HTML转换为PDF $pdf->AddPage(); $html = '<h1>Hello, world!</h1><p>This is a sample PDF document created with TCPDF.</p>'; $pdf->writeHTML($html, true, false, true, false, ''); // 输出PDF文件 $pdf->Output('example.pdf', 'D'); ``` 以上代码将在当前目录中生成名为"example.pdf"的PDF文件,可以在浏览器中下载。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值