为了账号安全,请及时绑定邮箱和手机立即绑定

使用不同方向时,mPDF 在 TOC 后创建空白页

使用不同方向时,mPDF 在 TOC 后创建空白页

PHP
胡说叔叔 2021-06-29 04:35:14
我正在尝试通过工作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();我已经尝试了很多方法来完成这项工作,但没有成功。我将列出其中一些:使用toc-selector="page-portrait"的<tocpagebreak>标签使用toc-orientation="P"的<tocpagebreak>标签在<pagebreak orientation="L" />后面加一个<tocpagebreak>使用class="landscape"在div所述TOC后,使用所述@page选择器,如本例所示变量设置autoPageBreak到false上MPDF的构造将页面包裹起来div并弄乱位置<pagebreak>我使用的是 mPDF v6.0,现在我正在更新到 mPDF v8.0.1。此问题发生在所有版本(6、7 和 8)上。在第 6 版中,我通过添加$mpdf->DeletePages(2);after使用了 hack,$mpdf->WriteHTML($html);但这有两个主要问题:这种方法没有记录,似乎有问题有了这个,页码与正确的页面不匹配,所以我无法在页脚上添加页码有没有办法在没有空白页的情况下完成此操作?还是可行的解决方法?
查看完整描述

2 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

我正在使用问题中的代码并更新它以在 pdf 中的 TOC 之后生成没有空页的 pdf。

此处给出TOCpagebreak 将始终从奇数页码开始。此外,mpdf存在一个问题,它在 TOC 页之后添加了一个空白页。

我把html代码分成两部分,删除TOC后的空白页,得到最终的pdf。

php中的代码是:


require_once __dir__.'/vendor/autoload.php';



$html = '<html>

<head>

    <style>

        @page page-landscape { size: landscape; }

        @page page-portrait { size: portrait; page-break-inside:avoid; }


        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 />';


$mpdf = new \Mpdf\Mpdf();


$mpdf->WriteHTML($html);

$page = $mpdf->page;



$html2= '<div class="portrait" style="page-break:avoid !important;">

       <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="landscape">

        another page

    </div>

</body>

</html>';



$mpdf->WriteHTML($html2);

$mpdf->DeletePages($page);

$mpdf->Output();


查看完整回答
反对 回复 2021-07-02
  • 2 回答
  • 0 关注
  • 255 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信