热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Laravel使用laravelsnappy包实现HTML转PDF和PNG

前言由于公司要开发一个新的工具叫做云合同,可以预设好几套固定的合同模板(html页面),使用参数填充方式将合同内的数据灵活变化,然后生成PDF和PNG查阅一番我们发现了larave






前言

由于公司要开发一个新的工具叫做云合同,可以预设好几套固定的合同模板(html页面),使用参数填充方式将合同内的数据灵活变化,然后生成 PDF 和 PNG
查阅一番我们发现了 laravel-snappy 这个包,底层使用的是 wkhtmltopdfwkhtmltopdf 是构建于 QT Webkit 之上,而 QT Webkit 又是基于 Webkit 的,跟我们的浏览器一样的渲染引擎。


Centos7 安装 wkhtmltopdf

1、先查看系统是 32 位的还是 64 位的

uname -a

2、通过 composer 安装 wkhtmltopdf

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

3、接下来将安装好的 wkhtmltopdf 复制到 Linux 系统可执行命令的目录中

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

Centos8 安装 wkhtmltopdf

1、官网地址

https://wkhtmltopdf.org/downloads.html

2、下载

wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox-0.12.5-1.centos8.x86_64.rpm

3、安装

[root@blog source]# rpm -ivh wkhtmltox-0.12.5-1.centos8.x86_64.rpm
error: Failed dependencies:
xorg-x11-fonts-75dpi is needed by wkhtmltox-1:0.12.5-1.centos8.x86_64
xorg-x11-fonts-Type1 is needed by wkhtmltox-1:0.12.5-1.centos8.x86_64

报错了,先把有依赖的两个包安装好

[root@blog source]# dnf install xorg-x11-fonts-75dpi
[root@blog source]# dnf install xorg-x11-fonts-Type1
//若 dnf 安装时最后报错 Error: GPG check FAILED
dnf install xorg-x11-fonts-75dpi --nogpgcheck
dnf install xorg-x11-fonts-Type1 --nogpgcheck

再次安装就OK了

[root@blog source]# rpm -ivh wkhtmltox-0.12.5-1.centos8.x86_64.rpm
Verifying... ################################# [100%]
Preparing... ################################# [100%]
Updating / installing...
1:wkhtmltox-1:0.12.5-1.centos8 ################################# [100%]

Laravel 安装 snappy

composer require barryvdh/laravel-snappy

配置

1、将 ServiceProvider 添加到 config/app.php 中的 providers 数组中

Barryvdh\Snappy\ServiceProvider::class,

2、将 Facades 添加到 config/app.php 中的 aliases 数组中

'PDF' => Barryvdh\Snappy\Facades\SnappyPdf::class,
'SnappyImage' => Barryvdh\Snappy\Facades\SnappyImage::class,

3、生成配置文件

php artisan vendor:publish --provider="Barryvdh\Snappy\ServiceProvider"

注意:config 文件夹中的 snappy.php 就是其配置文件,binary 指向的就是上面安装的 wkhtml 相关路径.



使用


PDF

//一、下载
$pdf = \PDF::loadView('welcome', $data);
return $pdf->download('welcome.pdf');
//二、渲染页面,在浏览器中显示
$html = '

订单id

12346546

';
$pdf = \PDF::loadHTML($html);
return $pdf->inline();
//三、渲染页面,在浏览器中显示,并且保存到本地
$html = '

订单id

12346546

'
;
return \PDF::loadHTML($html)->save("wkhtmltopdf.pdf")->inline("wkhtmltopdf.pdf");

Image

//一、下载
$img = \SnappyImage::loadView('welcome', $data);
return $img->download('welcome.png');
//二、渲染页面,在浏览器中显示
$html = '

订单id

12346546

';
$img = \SnappyImage::loadHTML($html);
return $img->inline();
//三、渲染页面,在浏览器中显示,并且保存到本地
$html = '

订单id

12346546

'
;
return \SnappyImage::loadHTML($html)->save("wkhtmltoimage.png")->inline("wkhtmltoimage.png");

更换字体

我们生成的 html 如果要更换字体,首先要保证服务器中有该字体,参照下方的踩坑记录中安装字体一节,然后在 html 中用 css 写入 font-family 样式


font-family 的值就是字体的英文名字



生成 pdfimage 时可选的 option 参数

这些参数在网上找不到最全的讲解,但是源码中肯定是最全的,在 knplabs/knp-snappy 包中有 imagepdf 更详细的参数讲解
Laravel 使用  laravel-snappy 包 实现 HTML 转 PDF 和 PNG


使用 wkhtmltoimage 时,默认生成的图片都很模糊,如何调整图片的清晰度

引用该博文

wkhtmltoimage
--disable-smart-width \
--zoom 3.125 \
--width 3125 \
<input-url> \
<output-file>

踩坑记录

一、当执行生成时若提示 libXrenderlibssl 库不存在需要安装相对应库

//apt-get 安装方法
apt-get install libXrender*
apt-get install libssl*
//yum 安装方法
yum install libXrender*
yum install libssl*
//若 yum 安装时最后报错 Error: GPG check FAILED
yum install libXrender* --nogpgcheck
yum install libssl* --nogpgcheck

Laravel 使用  laravel-snappy 包 实现 HTML 转 PDF 和 PNG
如果报这个错

apt-get install fontconfig

Laravel 使用  laravel-snappy 包 实现 HTML 转 PDF 和 PNG

apt-get install libXext*

二、中文显示乱码问题,这个问题需要在 Linux 中安装中文字体即可解决
三、Centos7.6的安装方式可以直接通过 composer,而 Centos8 需要0.12.5版本的wkhtmltopdf,并且安装方式为 rpm,这个需要注意下


结尾


以上内容是在互联网上各平台汇总之后的内容,下面的是遇到问题解决后的各个链接

这个只能生成 pdf,已经走通
github.com/barryvdh/laravel-dompdf
blog.csdn.net/hwhsong/article/deta...

//pdf和image都能生成,用的 wkhtmltopdf
博客:PDF 扩展包使用
博客:Laravel HTML 导出 PDF 方案 ----- wkhtmltopdf Laravel-snappy
使用 wkhtmltopdf 生成出来乱码,是因为服务器中没装中文字体
www.cnblogs.com/huangyanqi/p/10609...
在公司测试服务器的lnmp_php容器中使用 yum install 安装包报错 Error: GPG heck FAILED
blog.csdn.net/qq_41919792/article/...
安装之后,执行操作,若提示“wkhtmltopdf: cannot connect to X server”错误
www.023dns.com/server_ECS/2190.html
无法解析SSLv3_client_method / SSLv3_server_method
问答:Laravel-snappy 在服务器执行的时候报如下错误,本地正常,求解?
github.com/wkhtmltopdf/wkhtmltopdf...
Centos8使用wkhtmltopdf
www.cnblogs.com/architectforest/p/...

讨论 dompdf 和 wkhtmltopdf
问答:关于 DomPDF 导出中文乱码问题




推荐阅读
  • 本文详细介绍了如何在 CentOS 7 及其衍生发行版(如 Red Hat, Oracle, Scientific Linux 7)上安装和完全卸载 GitLab。包括安装必要的依赖关系、配置防火墙、安装 GitLab 软件包以及常见问题的解决方法。 ... [详细]
  • 在CentOS 7中部署Nginx并配置SSL证书
    本文详细介绍了如何在CentOS 7操作系统上安装Nginx服务器,并配置SSL证书以增强网站的安全性。适合初学者和中级用户参考。 ... [详细]
  • 利用 Calcurse 在 Linux 终端高效管理日程与任务
    对于喜爱使用 Linux 终端进行日常操作的系统管理员来说,Calcurse 提供了一种强大的方式来管理日程安排、待办事项及会议。本文将详细介绍如何在 Linux 上安装和使用 Calcurse,帮助用户更有效地组织工作。 ... [详细]
  • 本文详细介绍如何在华为鲲鹏平台上构建和使用适配ARM架构的Redis Docker镜像,解决常见错误并提供优化建议。 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中安装 Python 3.7 的步骤,包括编译工具的安装、Python 3.7 源码的下载与编译、软链接的创建以及常见错误的处理方法。 ... [详细]
  • CentOS7通过RealVNC实现多人使用服务器桌面
    背景:公司研发团队通过VNC登录到CentOS服务器的桌面实现软件开发工作为防止数据外泄,需要在RealVNC设置禁止传输文件、访问粘贴板等策略过程&# ... [详细]
  • 说明Python教程正在编写中,欢迎大家加微信sinbam提供意见、建议、纠错、催更。drymail是一个邮件发送库,封装了Python的smtplib ... [详细]
  • 本文分享了作者在使用LaTeX过程中的几点心得,涵盖了从文档编辑、代码高亮、图形绘制到3D模型展示等多个方面的内容。适合希望深入了解LaTeX高级功能的用户。 ... [详细]
  • 随着Linux操作系统的广泛使用,确保用户账户及系统安全变得尤为重要。用户密码的复杂性直接关系到系统的整体安全性。本文将详细介绍如何在CentOS服务器上自定义密码规则,以增强系统的安全性。 ... [详细]
  • 如何在Win10系统下通过VMware 14 Pro安装CentOS 7
    本文详细介绍了在Windows 10操作系统中使用VMware Workstation 14 Pro搭建CentOS 7虚拟环境的步骤,包括所需工具、安装过程及系统配置等。 ... [详细]
  • 本文详细介绍了如何在CentOS 6.5系统上安装和配置Redis 3.0.6,包括必要的环境准备、软件包下载、编译安装及基本功能测试。 ... [详细]
  • 本文介绍了SELinux的两种主要工作模式——强制模式和宽容模式,并提供了如何在CentOS 7中正确启用和配置SELinux的方法,以及在遇到登录问题时的解决策略。 ... [详细]
  • CentOS下ProFTPD的安装与配置指南
    本文详细介绍在CentOS操作系统上安装和配置ProFTPD服务的方法,包括基本配置、安全设置及高级功能的启用。 ... [详细]
  • CentOS 7 默认安装了 MariaDB,作为 MySQL 的一个分支。然而,出于特定需求,我们可能仍需在系统中安装 MySQL。本文将详细介绍如何通过 Yum 包管理器在 CentOS 7 上安装 MySQL,并提供一些常用的 MySQL 命令。 ... [详细]
  • 本文介绍了在 CentOS 7 系统中如何查看所有活动进程及其运行时间。通过使用 `netstat` 和 `ps` 命令,您可以轻松获取进程的详细信息,包括启动时间、用户、终端和命令等。 ... [详细]
author-avatar
克乄浪木守
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有