当前位置: 首页 > news >正文

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

相关文章:

  • 从零搭建AI工作站:Gemma3大模型本地部署+WebUI配置全套方案
  • 用 openssl 测试 tls 连接
  • C++23 views::slide (P2442R1) 深入解析
  • 奇次谐波和偶次谐波【EMC】
  • 扩展:React 项目执行 yarn eject 后的 scripts 目录结构详解
  • 数据结构与算法学习-JavaScript的Array.prototype.reduce()方法
  • 【K8S学习之探针】详细了解就绪探针 readinessProbe 和存活探针 livenessProbe 的配置
  • 【K8S学习之生命周期钩子】详细了解 postStart 和 preStop 生命周期钩子
  • JAVA EE_网络原理_数据链路层
  • 【网工第6版】第10章 网络规划和设计①
  • 【android bluetooth 框架分析 02】【Module详解 13】【CounterMetrics 模块介绍】
  • 【数据结构】双链表
  • 数据结构(六)——树和二叉树
  • 【漫话机器学习系列】255.独立同分布(Independent and Identically Distributed,简称 IID)
  • 【001】renPy android端启动流程分析
  • 致远OA人事标准模块功能简介【附应用包百度网盘下载地址,官方售价4W】
  • thinkphp模板文件缺失没有报错/thinkphp无法正常访问控制器
  • 最大子数组和
  • 智能家居“心脏“升级战:GD25Q127CSIG国产芯片如何重构家庭物联生态
  • LeetCode:513、找树左下角的值
  • 长沙查处疑似非法代孕:有人企图跳窗,有女子被麻醉躺手术台
  • 十大券商看后市|A股中枢有望逐步震荡抬升,把握结构性行情
  • IPO周报|本周A股暂无新股网上申购,年内最低价股周二上市
  • 外交部就习近平主席将出席中拉论坛第四届部长级会议开幕式介绍情况
  • 中美经贸高层会谈在瑞士日内瓦举行
  • 铁肩担道义,历史鉴未来——中共中央政治局委员、外交部长王毅谈习近平主席对俄罗斯进行国事访问并出席纪念苏联伟大卫国战争胜利80周年庆典