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

发布于:2025-05-12 ⋅ 阅读:(13) ⋅ 点赞:(0)

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


网站公告

今日签到

点亮在社区的每一天
去签到