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'); //直接下载