使用PHP中的DOMPDF在PDF页面中的标题

San*_*ndy 36 php pdf-generation dompdf

我正在使用DOMPDF创建一个PDF文件.我有一个很大的内容要提取PDF格式,我们需要在所有页面中都有一些标题.因此,任何人都可以在PDF中添加页眉和页脚,以便使用DOMPDF在所有页面中显示标题.

Bri*_*anS 61

在0.6.0代码中,您将能够使用HTML + CSS生成页眉和页脚.与使用内联PHP相比,存在一些限制(例如,还没有PAGE_COUNT占位符),因此这是否可行取决于您的需求.

以下代码将生成带有页眉和页脚两页文档:

<html>
<head>
  <style>
    @page { margin: 180px 50px; }
    #header { position: fixed; left: 0px; top: -180px; right: 0px; height: 150px; background-color: orange; text-align: center; }
    #footer { position: fixed; left: 0px; bottom: -180px; right: 0px; height: 150px; background-color: lightblue; }
    #footer .page:after { content: counter(page, upper-roman); }
  </style>
<body>
  <div id="header">
    <h1>Widgets Express</h1>
  </div>
  <div id="footer">
    <p class="page">Page </p>
  </div>
  <div id="content">
    <p>the first page</p>
    <p style="page-break-before: always;">the second page</p>
  </div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

如果需要访问某些缺少的功能,也可以使用这两种样式的组合.使用该page_text方法添加的PDF对象和文本呈现在HTML内容之上.

  • @BrianS dompdf 尊重页面计数器吗?我还没能让它发挥作用。这就是我所说的“counter(pages);”的“content: counter(page)”;``` (3认同)
  • 重要提示:将页眉和页脚放在代码的开头会将它们打印在每一页上。将它们放在末尾将省略第一页上的页眉和页脚。此外,页眉和页脚标签必须是正文的直接子级。资料来源:https://www.agoradesign.at/blog/potential-pitfalls-when-using-dompdf-and-how-fix-them (2认同)

vst*_*stm 20

DOMPDF维基上有一个FAQ条目:有没有办法添加页眉和页脚或页码?.

因此,您可以将以下"内联PHP"-snippet添加到HTML输入中(page_text为页脚添加类似的-call):

<script type="text/php">
    if ( isset($pdf) ) {
        $font = Font_Metrics::get_font("helvetica", "bold");
        $pdf->page_text(72, 18, "Header: {PAGE_NUM} of {PAGE_COUNT}",
                        $font, 6, array(0,0,0));
    }
</script>    
Run Code Online (Sandbox Code Playgroud)

如果你想在调用者端实现这个(直接在PHP代码中),你必须调用DOMPDFS的get_canvas()-method,它返回底层的PDF-Renderer,它允许你调用page_text上面的例子中的方法.让我告诉你我的意思:

// your dompdf setup        
$dompdf = new DOMPDF();

$dompdf->load_html($html);
$dompdf->render();

// add the header
$canvas = $dompdf->get_canvas();
$font = Font_Metrics::get_font("helvetica", "bold");

// the same call as in my previous example
$canvas->page_text(72, 18, "Header: {PAGE_NUM} of {PAGE_COUNT}",
                   $font, 6, array(0,0,0));
Run Code Online (Sandbox Code Playgroud)

最终,你必须调用page_textload_html(只是尝试一下).

  • 你的第二部分代码是更好的,没有内联脚本PHP代码.但是"//添加标题"部分必须在"$ dompdf-> render();"之后 为了工作. (10认同)
  • 在0.7.0中,Font_Metrics现在可用于dompdf对象`$ font = $ dompdf-> getFontMetrics() - > get_font("helvetica","bold");` (3认同)

Jso*_*owa 11

如果你想得到类似的东西: 在此输入图像描述

定义文档的页眉、页脚和内容如下:

<html>
    <head>
        <style>
            @page {
                margin: 100px 25px;
            }

            header {
                position: fixed;
                top: -60px;
                height: 50px;
                background-color: #752727;
                color: white;
                text-align: center;
                line-height: 35px;
            }

            footer {
                position: fixed;
                bottom: -60px;
                height: 50px;
                background-color: #752727;
                color: white;
                text-align: center;
                line-height: 35px;
            }
        </style>
    </head>
    <body>
        <header>
            Header
        </header>

        <footer>
            Footer
        </footer>

        <main>
            <!-- Your main content -->
        </main>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

  • 它将添加到每个页面。 (3认同)