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

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.xdnf.cn/news/5583.html

相关文章:

  • 【HarmonyOS 5】鸿蒙碰一碰分享功能开发指南
  • dfs 第一次加训 详解 下
  • [原创](现代Delphi 12指南):[macOS 64bit App开发]: 如何获取当前用户主目录(即:~波浪符号目录)?
  • 3DGS-to-PC:3DGS模型一键丝滑转 点云 or Mesh 【Ubuntu 20.04】【2025最新版!!】
  • [ARM][汇编] 01.基础概念
  • 单片机-STM32部分:13-1、编码器
  • Kubernetes vs. OpenShift:深入比较与架构解析
  • 在Taro中开发一个跨端Svg组件,同时支持小程序、H5、React Native
  • PyTorch Lightning实战 - 训练 MNIST 数据集
  • 华为ensp实现跨vlan通信
  • uniapp|商品列表加入购物车实现抛物线动画效果、上下左右抛入、多端兼容(H5、APP、微信小程序)
  • LeetCode 513 找树左下角的值 LeetCode 112 路径总和 LeetCode106 从中序与后序遍历序列构造二叉树
  • 【SSM-SpringMVC(二)】Spring接入Web环境!本篇开始研究SpringMVC的使用!SpringMVC数据响应和获取请求数据
  • 【node】6 包与npm
  • wordpress主题分享
  • 使用本地部署的 LLaMA 3 模型进行中文对话生成
  • 前端上传el-upload、原生input本地文件pdf格式(纯前端预览本地文件不走后端接口)
  • vue2/3 中使用 @vue-office/docx 在网页中预览(docx、excel、pdf)文件
  • Python | 赤道频散关系图
  • Spark处理过程-转换算子和行动算子(一)
  • 转运机器人可以绕障吗?
  • go语言实现IP归属地查询
  • C++11详解
  • Java 并发编程挑战:从原理到实战的深度剖析与解决方案
  • Go语言即时通讯系统 开发日志day1
  • 扩展:React 项目执行 yarn eject 后的 scripts 目录结构详解
  • LeetCode 2094.找出 3 位偶数:遍历3位偶数
  • ExcelJS库的使用
  • 【技巧】使用frpc点对点安全地内网穿透访问ollama服务
  • 电池串联和并联的区别