You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

footer-signature类无法横向排列问题求助(PDF导出视图)

解决PDF导出中签名栏无法横向排列的问题

问题分析

你的代码中虽使用Flex布局实现签名栏横向排列,但多数PDF导出工具(如dompdf、wkhtmltopdf)基于旧版渲染引擎,对CSS Flexbox的支持存在兼容性问题,导致Flex布局在PDF视图中失效,元素默认垂直排列。此外,原代码中.signature-block设置了flex-direction: row,会导致每个签名块内的文字与签名线水平排列,不符合目标的垂直排列结构。

解决方案

推荐使用表格布局(PDF渲染兼容性最优)或inline-block布局替代Flex,以下是具体实现:

方案1:表格布局(最稳妥)

表格在所有PDF渲染引擎中都能完美适配,将签名栏结构改为表格:

<!DOCTYPE html>
<html>
<head>
    <title>Detail Transaksi</title>
    <style>
        body {
            font-family: Arial, sans-serif;
        }

        h3 {
            text-align: center;
        }

        table {
            border-collapse: collapse;
            width: 100%;
            margin-bottom: 2em;
        }

        table th, table td {
            border: 1px solid #000000;
            padding: 8px;
            text-align: center;
        }

        /* 签名栏表格样式 */
        .signature-table {
            width: 100%;
            border: none;
            margin-top: 2em;
        }
        .signature-table td {
            border: none;
            text-align: center;
            width: 33.33%; /* 三个签名块均分宽度 */
        }
        .signature-space {
            margin-top: 4em;
            display: block;
        }
    </style>
</head>
<body>
    <h3>PERMOHONAN KEBUTUHAN ALAT TULIS KANTOR (ATK)</h3>
    <h5>Unit: {{ $unit }}</h5>
    <h5>Tanggal: {{ $tanggal }}</h5>

    <table>
        <thead>
            <tr>
                <th rowspan="2">No</th>
                <th colspan="3">Kebutuhan</th>
                <th rowspan="2">Keterangan</th>
            </tr>
            <tr>
                <th>Nama Barang</th>
                <th>Jumlah</th>
                <th>Satuan</th>
            </tr>
        </thead>
        <tbody>
            @foreach ($items as $index => $item)
                <tr>
                    <td>{{ $index + 1 }}</td>
                    <td>{{ $item['nama_barang'] }}</td>
                    <td>{{ $item['jumlah'] }}</td>
                    <td>{{ $item['satuan'] }}</td>
                    <td>{{ $item['keterangan'] }}</td>
                </tr>
            @endforeach
        </tbody>
    </table>

    <!-- 修改后的签名栏 -->
    <table class="signature-table">
        <tr>
            <td>
                <div>Pemohon</div>
                <span class="signature-space">(..........................................)</span>
            </td>
            <td>
                <div>Petugas Gudang</div>
                <span class="signature-space">(person name)</span>
            </td>
            <td>
                <div>Operator Persediaan</div>
                <span class="signature-space">(person name)</span>
            </td>
        </tr>
    </table>
</body>
</html>

方案2:inline-block布局

若偏好非表格结构,可使用inline-block替代Flex,确保PDF渲染时保持横向排列:

<!DOCTYPE html>
<html>
<head>
    <title>Detail Transaksi</title>
    <style>
        body {
            font-family: Arial, sans-serif;
        }

        h3 {
            text-align: center;
        }

        table {
            border-collapse: collapse;
            width: 100%;
            margin-bottom: 2em;
        }

        table th, table td {
            border: 1px solid #000000;
            padding: 8px;
            text-align: center;
        }

        .footer-signature {
            width: 100%;
            margin-top: 2em;
            text-align: center;
            font-size: 0; /* 消除inline-block元素间的空白间隙 */
        }

        .signature-block {
            display: inline-block;
            width: 33.33%;
            font-size: 16px; /* 恢复字体大小 */
            text-align: center;
        }

        .signature-space {
            margin-top: 4em;
            display: block;
        }
    </style>
</head>
<body>
    <h3>PERMOHONAN KEBUTUHAN ALAT TULIS KANTOR (ATK)</h3>
    <h5>Unit: {{ $unit }}</h5>
    <h5>Tanggal: {{ $tanggal }}</h5>

    <table>
        <thead>
            <tr>
                <th rowspan="2">No</th>
                <th colspan="3">Kebutuhan</th>
                <th rowspan="2">Keterangan</th>
            </tr>
            <tr>
                <th>Nama Barang</th>
                <th>Jumlah</th>
                <th>Satuan</th>
            </tr>
        </thead>
        <tbody>
            @foreach ($items as $index => $item)
                <tr>
                    <td>{{ $index + 1 }}</td>
                    <td>{{ $item['nama_barang'] }}</td>
                    <td>{{ $item['jumlah'] }}</td>
                    <td>{{ $item['satuan'] }}</td>
                    <td>{{ $item['keterangan'] }}</td>
                </tr>
            @endforeach
        </tbody>
    </table>

    <!-- 签名栏 -->
    <div class="footer-signature">
        <div class="signature-block">
            <div>Pemohon</div>
            <div class="signature-space">(..........................................)</div>
        </div>
        <div class="signature-block">
            <div>Petugas Gudang</div>
            <div class="signature-space">(person name)</div>
        </div>
        <div class="signature-block">
            <div>Operator Persediaan</div>
            <div class="signature-space">(person name)</div>
        </div>
    </div>
</body>
</html>

关键说明

  1. 表格布局是PDF导出场景下最可靠的方案,完全兼容所有主流渲染引擎;
  2. 使用inline-block时,需通过font-size:0消除元素间的默认空白间隙,避免排版错位;
  3. 修正了原代码中.signature-block的flex-direction: row错误,改为垂直排列结构以匹配目标效果。

内容的提问来源于stack exchange,提问作者12220964 AL FARELL GHAZALI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 16:41:06