内容简介:项目近期有个业务需求:下载PDF版发票。和公司前辈沟通,有两种方案因为我们项目使用了多台服务器,所以我们就把PDF文件先上传到oss再进行下载的,如果不需要可以直接用Header方式下载
前言
项目近期有个业务需求:下载PDF版发票。和公司前辈沟通,有两种方案
- 先做成图片,把动态数据用画布坐标的形式填充进去,把图片放进PDF文件中,再下载(比较繁琐)
- 先用html画页面,再转成PDF文件,再下载(觉得用这种方式)
一、安装依赖
wkhtmltopdf依赖安装(https://wkhtmltopdf.org/downloads.html) 可以直接在官网下载安装包,像服务器通过通过以下方式(找好对应的版本下载呦,我用的是ubantu 16)
wget https://downloads.wkhtmltopdf.org/0.12/0.12.5/wkhtmltox_0.12.5-1.xenial_amd64.deb apt-get install -f dpkg -i wkhtmltox_0.12.5-1.xenial_amd64.deb
如果出现以下错误,就重复下上面第二行命令和第三行命令
dpkg: error processing package wkhtmltox (--install): dependency problems - leaving unconfigured Errors were encountered while processing: wkhtmltox
二、代码演示
$outPut = view('invoice', [ 'orderData' => $orderData ])->render(); //invoice.blade.php是html模板,往里填充动态数据 //将填充完整的html文件存储起来,稍后用来转PDF $htmlName = $this->getHtmlName();//获取html文件名 $htmlDir = $this->getHtmlDir();//获取 html 工作目录 $htmlFullPath = storage_path($htmlDir . $htmlName); file_put_contents($htmlFullPath, $outPut); //设置pdf文件路径 $pdfName = $this->getPdfName($orderData['order_no']);//获取pdf文件名 $pdfDir = $this->getPDFDir();//获取 pdf 工作目录 $pdfFullPath = storage_path($pdfDir . $pdfName); //设置PDF文件的属性 $pdf = new Pdf($htmlFullPath); $pdf->setOptions([ 'no-outline', //'zoom' => 3, 'margin-top' => 0, 'margin-right' => 0, 'margin-bottom' => 0, 'margin-left' => 0, //'disable-smart-shrinking', ]); //保存PDF if (!$pdf->saveAs($pdfFullPath)) { \Log::error('Could not create PDF:', [$pdf->getError()]); return false; }
因为我们项目使用了多台服务器,所以我们就把PDF文件先上传到oss再进行下载的,如果不需要可以直接用Header方式下载
header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename=' . $pdfName); readfile($pdfFullPath);
三、可能遇到的问题
-
如果出现PDF文件下载下来,中文乱码的情况,那是因为缺少一个字体文件,下载这个字体simsun.ttc,把它添加到
/usr/share/fonts
目录。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Android原生下载(下篇)多文件下载+多线程下载
- Netty接收HTTP文件上传及文件下载
- struts实战--文件下载
- post 下载文件 (excel)
- 笔记-js异步下载文件
- 前端培训-初级阶段-场景实战(2019-06-06)-下载文件&下载进度
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
程序员2010精华本
程序员杂志社 / 电子工业 / 2011-1 / 49.00元
《程序员(2010精华本)》主要内容:《程序员》创刊10年来,每年末编辑部精心打造的“合订本”已经形成一个品牌,得到广大读者的认可和喜爱。今年,《程序员》杂志内容再次进行了优化整合,除了每期推出的一个大型专题策划,各版块也纷纷以专题、策划的形式,将每月的重点进行了整合,让内容非常具有凝聚力,如专题篇、人物篇、实践篇等。另外杂志的版式、色彩方面也有了很大的飞跃,给读者带来耳目一新的阅读体验。一起来看看 《程序员2010精华本》 这本书的介绍吧!