Code前端首页关于Code前端联系我们

laravel 将 HTML 页面转换为 PDF 文件 - laravel-dompdf 和 laravel-snappy 扩展包

terry 2年前 (2023-09-25) 阅读数 50 #后端开发

在这个项目中,我需要将 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目录下

laravel将HTML页面转换为PDF文件——laravel-dompdf和laravel-snappy扩展包

bin目录下有两个依赖软件wkhtmltoimage和wkhtmltopdf

laravel将HTML页面转换为PDF文件——laravel-dompdf和laravel-snappy扩展包

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前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门