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

我正在尝试通过工作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选择器,如本例所示

  • 变量设置autoPageBreakfalse上MPDF的构造

  • 将页面包裹起来div并弄乱位置<pagebreak>

我使用的是 mPDF v6.0,现在我正在更新到 mPDF v8.0.1。此问题发生在所有版本(6、7 和 8)上。在第 6 版中,我通过添加$mpdf->DeletePages(2);after使用了 hack,$mpdf->WriteHTML($html);但这有两个主要问题:

  1. 这种方法没有记录,似乎有问题

  2. 有了这个,页码与正确的页面不匹配,所以我无法在页脚上添加页码

有没有办法在没有空白页的情况下完成此操作?还是可行的解决方法?


胡说叔叔
浏览 259回答 2
2回答

侃侃无极

我正在使用问题中的代码并更新它以在 pdf 中的 TOC 之后生成没有空页的 pdf。此处给出TOCpagebreak 将始终从奇数页码开始。此外,mpdf存在一个问题,它在 TOC 页之后添加了一个空白页。我把html代码分成两部分,删除TOC后的空白页,得到最终的pdf。php中的代码是:require_once __dir__.'/vendor/autoload.php';$html = '<html><head>&nbsp; &nbsp; <style>&nbsp; &nbsp; &nbsp; &nbsp; @page page-landscape { size: landscape; }&nbsp; &nbsp; &nbsp; &nbsp; @page page-portrait { size: portrait; page-break-inside:avoid; }&nbsp; &nbsp; &nbsp; &nbsp; div.landscape {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; page: page-landscape;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; div.portrait {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; page: page-portrait;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; </style></head><body>&nbsp; &nbsp; <div>&nbsp; &nbsp; &nbsp; &nbsp; <div>First page - displayed Portrait. The second page should be the TOC (portrait) and the 3rd should be on landscape</div>&nbsp; &nbsp; </div><tocpagebreak />';$mpdf = new \Mpdf\Mpdf();$mpdf->WriteHTML($html);$page = $mpdf->page;$html2= '<div class="portrait" style="page-break:avoid !important;">&nbsp; &nbsp; &nbsp; &nbsp;<bookmark content="TOC entry" level="0"/>&nbsp; &nbsp; &nbsp; &nbsp; <tocentry content="TOC entry" level="0"/>&nbsp; &nbsp; &nbsp; &nbsp; <p>TOC entry - Shouldn\'t have a empty page before</p>&nbsp; &nbsp; </div>&nbsp; &nbsp; <div class="landscape">&nbsp; &nbsp; &nbsp; &nbsp; another page&nbsp; &nbsp; </div></body></html>';$mpdf->WriteHTML($html2);$mpdf->DeletePages($page);$mpdf->Output();
打开App,查看更多内容
随时随地看视频慕课网APP