laravel 中使用的pdf 扩展包 laravel-snappy(已解决中文乱码)

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

Laravel 安装 snappy

composer require barryvdh/laravel-snappy

配置(可选,Laravel 5.5+ 自动发现、不用管1、2步骤)
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' => ['enabled' => true,'binary'  => env('WKHTML_PDF_BINARY', '/usr/local/bin/wkhtmltopdf-amd64'),'timeout' => false,'options' => [],'env'     => [],],'image' => ['enabled' => true,'binary'  => env('WKHTML_IMG_BINARY', '/usr/local/bin/wkhtmltoimage-amd64'),'timeout' => false,'options' => [],'env'     => [],],

解决中文字体乱码问题

参考说明:中文乱码解决
1、Ubuntu

apt-get install fonts-wqy-microhei ttf-wqy-microhei fonts-wqy-zenhei ttf-wqy-zenhei 

2、CentOS 7

yum install wqy-microhei-fonts wqy-zenhei-fonts

具体使用

 $html ='
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>水果供应链数据表格</title><style>body {font-family: Arial, sans-serif;margin: 0;padding: 20px;background-color: #f5f5f5;}.container {max-width: 1200px;margin: 0 auto;}h1 {color: #333;text-align: center;}.table-container {overflow-x: auto;}table {width: 100%;border-collapse: collapse;}th, td {padding: 12px 15px;text-align: left;border-bottom: 1px solid #ddd;}th {background-color: #f2f2f2;font-weight: bold;}tr:hover {background-color: #f5f5f5;}.status {padding: 4px 8px;border-radius: 4px;font-size: 12px;font-weight: bold;display: inline-block;}.status-green {background-color: #d4edda;color: #155724;}.status-yellow {background-color: #fff3cd;color: #856404;}.status-red {background-color: #f8d7da;color: #721c24;}.action-btn {padding: 5px 10px;margin-right: 5px;border: none;border-radius: 4px;cursor: pointer;}.view-btn {background-color: #17a2b8;color: white;}.edit-btn {background-color: #28a745;color: white;}.delete-btn {background-color: #dc3545;color: white;}</style>
</head>
<body>
<div class="container"><h1>水果供应链数据表格</h1><div class="table-container"><table><thead><tr><th>ID</th><th>水果名称</th><th>供应商</th><th>供应日期</th><th>数量(kg)</th><th>价格(¥/kg)</th><th>新鲜度</th><th>库存状态</th></tr></thead><tbody><tr><td>1</td><td>红富士苹果</td><td>绿源农场</td><td>2025-05-10</td><td>2,540</td><td>8.50</td><td>96%</td><td><span class="status status-green">充足</span></td></tr><tr><td>2</td><td>进口香蕉</td><td>热带水果公司</td><td>2025-05-09</td><td>1,875</td><td>6.20</td><td>92%</td><td><span class="status status-green">充足</span></td></tr><tr><td>3</td><td>脐橙</td><td>阳光果园</td><td>2025-05-08</td><td>3,200</td><td>7.80</td><td>89%</td><td><span class="status status-green">充足</span></td></tr><tr><td>4</td><td>巨峰葡萄</td><td>葡萄园主</td><td>2025-05-07</td><td>1,250</td><td>12.00</td><td>78%</td><td><span class="status status-yellow">中等</span></td></tr><tr><td>5</td><td>奶油草莓</td><td>甜蜜农场</td><td>2025-05-06</td><td>870</td><td>18.50</td><td>65%</td><td><span class="status status-red">低库存</span></td></tr><tr><td>6</td><td>金煌芒果</td><td>南方果园</td><td>2025-05-05</td><td>2,150</td><td>15.20</td><td>90%</td><td><span class="status status-green">充足</span></td></tr><tr><td>7</td><td>哈密瓜</td><td>西域果园</td><td>2025-05-04</td><td>1,620</td><td>5.80</td><td>94%</td><td><span class="status status-green">充足</span></td></tr><tr><td>8</td><td>菠萝</td><td>南方水果公司</td><td>2025-05-03</td><td>980</td><td>7.50</td><td>88%</td><td><span class="status status-green">充足</span></td></tr></tbody></table></div>
</div>
</body>
</html>';      
$pdf = SnappyPdf::loadHTML($html);$pdf->setOptions(['orientation' => 'landscape', // 横向(默认是 portrait 纵向)// 可选:若需自定义页面大小(如 A4 横向需调换宽高)// 'page-size' => 'A4', // 保持页面大小,自动适应横向// 或自定义尺寸(单位:mm/in/cm,例如 A4 横向为 297mm×210mm)// 'page-size' => '297mm 210mm',]);
return $pdf->inline(); //浏览器浏览
return  $pdf->download('welcome.pdf'); //直接下载

参考文章:https://learnku.com/articles/50557

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/79839.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Rust:重新定义系统编程的安全与效率边界

在软件工程领域&#xff0c;内存安全漏洞每年造成数千亿美元损失&#xff0c;而C/C生态中60%的漏洞源于指针误用。正是在这样的背景下&#xff0c;Rust凭借其革命性的内存安全机制异军突起。作为一门现代系统级编程语言&#xff0c;Rust不仅解决了困扰开发者数十年的内存管理难…

C++学习细节回顾(汇总二)

一.初始化列表相关 1.初始化顺序受申明顺序影响 2.在必要时可以部分不采用初始化列表&#xff0c;避免受特性1影响 二.非类型模板参数 template< class T , size_t N 10 > 三.特化–特殊化处理 template< class T > bool less(T left , T right) { return left&…

勾选某一行的勾选框,更改当前行的颜色,ALV数据发生变化的事件

文章目录 屏幕ALV的创建定义变量注册事件方法定义方法实现frm_data_change 效果 屏幕 ALV的创建 DATA: g_gui_custom_container TYPE REF TO cl_gui_custom_container. DATA: g_gui_alv_grid TYPE REF TO cl_gui_alv_grid.DATA: gt_listheader TYPE slis_t_listheader, &quo…

AI-02a5a6.神经网络-与学习相关的技巧-批量归一化

批量归一化 Batch Normalization 设置合适的权重初始值&#xff0c;则各层的激活值分布会有适当的广度&#xff0c;从而可以顺利的进行学习。那么&#xff0c;更进一步&#xff0c;强制性的调整激活值的分布&#xff0c;是的各层拥有适当的广度呢&#xff1f;批量归一化&#…

解决SQL Server SQL语句性能问题(9)——合理使用表分区

9.2. 合理使用表分区 本专栏4.1.4节中,我们对表分区相关的概念和机制等基础理论进行了较为详细的介绍和论述,读者可以参考该节中内容,或者,读者也可以参考官方或其他相关资料。与其他关系库类似,SQL Server 2005版本中引进的真正意义上的表分区技术,绝对是解决海量数据环…

C语言学习之文件操作

经过前面的学习&#xff0c;我们已经基本掌握了如何去写一个C语言的代码了。但是在实际的项目中&#xff0c;我们不可能不需要文件去操作。因为如果没有文件&#xff0c;我们写的程序是存储在电脑的内存中的。如果程序推出&#xff0c;内存回收数据就随之丢失了。如果我们要对数…

2025年PMP 学习十三 第9章 项目资源管理(9.1,9.2)

2025年PMP 学习十三 第9章 项目资源管理&#xff08;9.1,9.2&#xff09; 序号过程过程组9.1规划资源管理规划9.2估算活动资源规划9.3获取资源执行9.4建设团队执行9.5管理团队执行9.6控制资源监控 文章目录 2025年PMP 学习十三 第9章 项目资源管理&#xff08;9.1,9.2&#xf…

蓝桥杯13届国B 完全日期

题目描述。 如果一个日期中年月日的各位数字之和是完全平方数&#xff0c;则称为一个完全日期。 例如&#xff1a;2021 年 6 月 5 日的各位数字之和为 20216516&#xff0c;而 16 是一个完全平方数&#xff0c;它是 4 的平方。所以 2021 年 6 月 5 日是一个完全日期。 例如&…

某某霸翻译逆向分析[JS逆向]

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;不提供完整代码&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 本文章未经…

开源Heygem本地跑AI数字人视频教程

图文教程&#xff1a; 点击跳转 视频教程 资料包下载 点击下载&#xff1a;

C++之fmt库介绍和使用(1)

C之fmt库介绍与使用(1) Author: Once Day Date: 2025年5月12日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: 源码分析_Once-Day的博客-CSDN博客 …

设计模式(9)——创建型模式之工厂方法

设计模式(9)——创建型模式之工厂方法 工厂方法作用结构伪代码适用场景工厂方法 作用 工厂方法是一种创建型设计模式,其在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型。 结构 产品(Product)将会对接口进行声明。对于所有由创建者及其子类构建的对象,…

Docker 疑难杂症解决指南:从入门到进阶的全面剖析

Docker 作为容器化技术的代表&#xff0c;凭借其轻量级、可移植性和高效资源利用率&#xff0c;已成为开发、测试和部署应用的标准工具。然而&#xff0c;在实际使用中&#xff0c;用户常常会遇到镜像构建失败、容器启动异常、网络配置问题等疑难杂症。本文将从镜像构建、容器生…

抢跑「中央计算+区域控制」市场,芯驰科技高端智控MCU“芯”升级

伴随着整车EE架构的加速变革&#xff0c;中国高端车规MCU正在迎来“新格局”。 在4月23日开幕的上海国际车展期间&#xff0c;芯驰科技面向新一代AI座舱推出了X10系列芯片&#xff0c;以及面向区域控制器、电驱和动力域控、高阶辅助驾驶和舱驾融合系统等的高端智控MCU产品E3系…

DeepPrep:深度学习提升神经影像预处理

DeepPrep&#xff1a;深度学习提升神经影像预处理 一、DeepPrep介绍和BIDS格式介绍 神经影像预处理的痛点&#xff1a;传统工具&#xff08;如fMRIPrep&#xff09;在大规模数据处理时效率低下&#xff0c;临床样本鲁棒性不足。DeepPrep通过深度学习工作流管理实现突破&#…

pytorch 数据预处理和常用工具

文章目录 NumPyNumpy数据结构安装和使用NumPy Matplotlib的安装和导入安装和导入Matplotlib绘制基础图画折线图散点图柱状图图例 数据清洗据清洗的作用Pandas进行数据清洗Pandas数据结构Series 数据结构DataFrame数据结构 Pandas数据清洗常用代码 特征工程主成分分析线性判别分…

MATLAB 中常用的微分函数介绍

MATLAB 中常用的微分函数介绍 在 MATLAB 中&#xff0c;微分运算是数值计算和符号计算中常用的功能。无论是在进行数据分析、优化算法&#xff0c;还是数学建模时&#xff0c;微分都扮演着重要的角色。本文将介绍 MATLAB 中常用的微分函数&#xff0c;并通过简单的示例帮助大家…

按指定位置或关键字批量删除工作表-Excel易用宝

在一个工作簿中有多个工作表&#xff0c;有些工作表不需要了&#xff0c;如果一个一个手动删除&#xff0c;那实在是太慢了&#xff0c;有没有什么好的方法可以批量删除工作表。 批量删除工作表很简单&#xff0c;单击【易用宝】→【工作表】→【批量删除工作表】。 在打开的批…

TypeScript装饰器:从入门到精通

TypeScript装饰器&#xff1a;从入门到精通 什么是装饰器&#xff1f; 装饰器&#xff08;Decorator&#xff09;是TypeScript中一个非常酷的特性&#xff0c;它允许我们在不修改原有代码的情况下&#xff0c;给类、方法、属性等添加额外的功能。想象一下装饰器就像给你的代码…

【SSL证书系列】客户端如何检查中间CA签名是否由根CA签发

客户端通过以下步骤检查中间CA的签名是否由受信任的根CA签发&#xff1a; 1. 证书链的构建 服务器发送的证书链通常包含&#xff1a; • 服务器证书&#xff08;由中间CA签发&#xff09; • 中间CA证书&#xff08;由根CA签发&#xff09; • 根CA证书&#xff08;通常不发送…