1

我正在尝试使用spatie/browsershotlaravel-browsershot 包装器在 Laravel 应用程序中生成包含视图内容的 PDF ;我使用 svg 作为我的信头背景,并希望将视图的内容放置在每个页面上 SVG 的特定区域内。不幸的是,边距->margins(40, 20, 40, 30)使我的#watermarkdiv 随边距移动 - 它不再处于固定的 0,0 位置。你能帮我正确设置水印div吗?所以它不受页边距的影响

在控制器中

 return PDF::loadView('pdf.letter', compact('letter'))
            ->showBackground()
            ->waitUntilNetworkIdle()
            ->margins(40, 20, 40, 30)
            ->format('A4')
            ->inline();

在我的刀片中,我设置了以下 css

#watermark { 
 position: fixed;
 top: 0px;
 left: 0px;
 width: 21cm;
 height: 29.7cm;
 z-index: -1000;
}
<body>
    <div id="watermark">
        <img src="{{ asset('/img/a4.svg') }}" height="100%" width="100%" />
    </div>
    <div>
        <!-- The content of PDF here -->
    </div>
</body>

我取得的最好成绩是这个

这里

其中虚线矩形是 SVG 文件中我希望视图的所有内容流过所有页面的区域,尊重设置的边距

我通过删除->margins(....)php 并向<body>标签 添加样式来实现它

body {
 margin-top: 4cm;
 margin-right: 2cm;
 margin-bottom: 4cm;
 margin-left: 3cm;
}

如您所见,第一页底部和下一页顶部的页面边距似乎为 0

4

1 回答 1

2

尝试以下操作:

自定义页眉和页脚 - https://github.com/spatie/browsershot#headers-and-footers

Browsershot::html($someHtml)
 ->showBrowserHeaderAndFooter()
 ->headerHtml($someHtml)
 ->footerHtml($someHtml)
 ->save('example.pdf');

处理分页符 - https://github.com/spatie/browsershot/issues/333

<div style="page-break-after:always;">

或者

这可以解决<div style="page-break-inside: avoid;">。请记住,该属性在内部不起作用flex

于 2020-04-21T00:20:22.780 回答