laravel 将 HTML 页面转换为 PDF 文件 - laravel-dompdf 和 laravel-snappy 扩展包
在这个项目中,我需要将 HTML 页面转换为 PDF 文件以便于打印。我在网上查了很多资料。我尝试了两个扩展包:laravel-dompdf 和 laravel-snappy。个人感觉laravel-snappy比较好用。
1。使用 laravel-dompdf 扩展包
1。安装扩展包
我们通过composer
composer require barryvdh/laravel-dompdf
2来安装。将 ServiceProvider 添加到 config/
Barryvdh\DomPDF\ServiceProvider::class,
3 中的提供者数组中。将外观添加到 config/
'PDF' => Barryvdh\DomPDF\Facade::class,
4 中的别名数组中。使用
创建 dompdf 实例并加载 HTML 字符串、文件或视图,然后使用 Stream() 方法将其显示在浏览器中,使用 save() 方法保存到文件或 download() 方法下载。
$pdf = App::make(''); $pdf->loadHTML('<h1>Test</h1>'); return $pdf->stream();
还可以使用门面,使用前先看一下PDF;
$pdf = PDF::loadView('', $data); return $pdf->download('');
还可以连锁操作
return PDF::loadFile(public_path().'/')->save('/path-to/')->stream('');
可以改变方向(横向设置方向为水平,一般使用垂直。使用时要注意)和纸张大小,以及隐藏或显示错误(默认调试时显示错误)打开)
PDF::loadHTML($html)->setPaper('a4', 'landscape')->setWarnings(false)->save('')
更多基本使用和配置,请参阅文档 https://github.com/barryvdh/laravel-dompdf
5。解决汉字乱码问题
下载支持unicode编码的中文字体。例如:(微软雅黑)
建议先在存储中创建一个fonts文件夹,并将字体放入fonts文件夹中,否则会出现错误。
在css中引入字体
<style> @font-face { font-family: 'msyh'; font-style: normal; font-weight: normal; src: url({{ storage_path('your_path/') }}) format('truetype'); } body { font-family: msyh, DejaVu Sans,sans-serif; } </style>
注:在我私人测试中,只有unicode编码的中文才能正常显示。这就是为什么我认为这个PDF扩展不太好用。 ?下载地址为http://www.softpedia.com/get/Office-tools/PDF/wkhtmltopdf.shtml
windows。直接下载安装即可。注意安装到你熟悉的地方。这条路稍后会派上用场。
我的安装在G:wk目录下
bin目录下有两个依赖软件wkhtmltoimage和wkhtmltopdf
Linux下载解压完成后,将文件移动到/usr/local/ bin
方法二:通过composer安装
以Linux系统为例
32位: $ composer require h4cc / wkhtmltopdf-i386 0.12.x $ composer require h4cc / wkhtmltoimage-i386 0.12.x, 64位: $ composer require h4cc/wkhtmltopdf-amd64 0.12.x $ composer require h4cc/wkhtmltoimage-amd64 0.12.x (uname -a 命令查看系统位数) cp vendor/h4cc/wkhtmltoimage-amd64/bin/wkhtmltoimage-amd64 /usr/local/bin/ cp vendor/h4cc/wkhtmltopdf-amd64/bin/wkhtmltopdf-amd64 /usr/local/bin/ 并使其可执行: chmod +x /usr/local/bin/wkhtmltoimage-amd64 chmod +x /usr/local/bin/wkhtmltopdf-amd64
在Linux上使用此第三方插件需要一些库的支持
apt-get install libXrender* apt-get install libfontconfig*
2。安装 laravel-snappy 扩展包
composer require barryvdh/laravel-snappy
3。添加 ServiceProvider 添加到 config/
Barryvdh\Snappy\ServiceProvider::class,
3 中的提供者数组中。将外观添加到 config/
'PDF' => Barryvdh\Snappy\Facades\SnappyPdf::class, 'SnappyImage' => Barryvdh\Snappy\Facades\SnappyImage::class,
4 中的别名数组中。生成配置文件
php artisan vendor:publish --provider="Barryvdh\Snappy\ServiceProvider"
该命令会在config/
中生成一个配置文件,具体配置如下:
<?php return array( 'pdf' => array( 'enabled' => true, // 'binary' => '/usr/local/bin/wkhtmltopdf', //依赖软件的路径,linux默认在此目录下'binary' => 'G:\wk\wkhtmltopdf\bin\wkhtmltopdf', 'timeout' => false, 'options' => array(), 'env' => array(), ), 'image' => array( 'enabled' => true, // 'binary' => '/usr/local/bin/wkhtmltoimage','binary' => 'G:\wk\wkhtmltopdf\bin\wkhtmltoimage', 'timeout' => false, 'options' => array(), 'env' => array(), ), );
5.使用(他们使用dompdf)
首先介绍
use PDF; use SnappyImage;
生成PDF文件
您可以使用facade打开HTML字符串、文件或显示,然后使用stream()方法在浏览器中显示。在设备上, save() 方法保存到文件或 download() 方法下载。
$pdf = PDF::loadView('', $data); return $pdf->download('');
还可以连锁操作
return PDF::loadFile(public_path().'/')->save('/path-to/')->stream('');
可以改变方向(横向设置方向为水平,一般用垂直,使用时注意)和纸张大小,隐藏或显示错误(默认情况下,调试时显示错误打开)
PDF::loadHTML($html)->setPaper('a4', 'landscape')->setWarnings(false)->save('')
创建图片
$pdf = SnappyImage::loadView('', $data); return $pdf->download('');
6。修复中英文字符问题(linux)
您可以将例如:宋朝或其他中文字体添加到/usr/share/fonts/
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。