php下载PDF文件

栏目: PHP · 发布时间: 6年前

内容简介:项目近期有个业务需求:下载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);

三、可能遇到的问题

  1. 如果出现PDF文件下载下来,中文乱码的情况,那是因为缺少一个字体文件,下载这个字体simsun.ttc,把它添加到 /usr/share/fonts 目录。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数据结构、算法与应用(原书第2版)

数据结构、算法与应用(原书第2版)

Sartaj Sahni / 王立柱、刘志红 / 机械工业出版社 / 2015-4 / 79.00元

《数据结构、算法与应用——C++语言描述》是享有盛誉的数据结构教科书的第2版。它完整地包含了基本数据结构的内容,是CS2课程的理想用书。作者Sartaj Sahni通过循循善诱的讲解、直观具体的讨论和基于现实的应用,让读者轻松、愉快地学习。新版书着重利用标准模板库(STL),把书中开发的数据结构和算法与相应的STL实现方法相互关联。本书还增加了很多新的实例和练习题。 书中的应用实例是它的特色......一起来看看 《数据结构、算法与应用(原书第2版)》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器