【发布时间】:2019-05-22 19:36:28
【问题描述】:
我正在尝试通过 mPDF 创建一个 PDF 文件,其中工作表具有以下方向:
___________
| Page 1 |
| |
| Portrait |
| |
___________
___________
| Page 2 |
| TOC |
| Portrait |
| |
___________
__________________
| Page 3 |
| Landscape |
| |
__________________
___________
| Page 4 |
| |
| Portrait |
| |
___________
但是,更改第 3 页的方向会使 mPDF 在第 2 页 (TOC) 和第 3 页之间创建一个空白页。
PDF 以 HTML 格式创建,然后处理为 mPDF。代码如下:
HTML:
<html>
<head>
<style>
@page page-landscape { size: landscape; }
@page page-portrait { size: portrait; }
div.landscape {
page: page-landscape;
}
div.portrait {
page: page-portrait;
}
</style>
</head>
<body>
<div>
<div>First page - displayed Portrait. The second page should be the TOC (portrait) and the 3rd should be on landscape</div>
</div>
<tocpagebreak />
<div class="landscape">
<bookmark content="TOC entry" level="0"/>
<tocentry content="TOC entry" level="0"/>
<p>TOC entry - Shouldn\'t have a empty page before</p>
</div>
<div class="portrait">
another page
</div>
</body>
</html>
PHP
$mpdf = new \Mpdf\Mpdf();
$mpdf->WriteHTML($html);
$mpdf->Output();
我已经尝试了很多方法来完成这项工作,但都没有成功。我将列出其中的一些:
- 在
<tocpagebreak>标签上使用toc-selector="page-portrait" - 在
<tocpagebreak>标签上使用toc-orientation="P" - 在
<tocpagebreak>之后添加<pagebreak orientation="L" /> - 在TOC之后的
div中使用class="landscape",使用@page选择器,如本例所示 - 在 mPDF 的构造函数上将变量
autoPageBreak设置为false - 将页面包装在
div中并弄乱<pagebreak>的位置
我使用的是 mPDF v6.0,现在我正在更新到 mPDF v8.0.1。所有版本(6、7 和 8)都会出现此问题。在版本 6 中,我通过在 $mpdf->WriteHTML($html); 之后添加 $mpdf->DeletePages(2); 来使用 hack,但这有两个主要问题:
- 此方法未记录在案,似乎有问题
- 这样,页码与正确的页面不匹配,所以我无法在页脚添加页码
有没有什么方法可以在没有空白页的情况下完成此操作?还是可行的解决方法?
【问题讨论】:
-
查看laravel-dompdf。附言。我无法发表评论,所以我发布的只是一个答案。