php 在第一页之后的页面上缺少使用画布的DOMPDF page_text

mfpqipee  于 2023-08-02  发布在  PHP
关注(0)|答案(1)|浏览(116)

我正在尝试在页脚中找到页面计数器。为此,我使用了php中使用getCanvas()->page_text()函数的选项(与脚本版本相反,我无法显示任何内容)。问题是1/1正确地显示在第一页上,但没有显示在任何其他呈现的页面上。
似乎Dompdf没有正确地注册它已经创建了多个页面,因为第一个页脚上显示的PAGE_COUNT也将保持在1,即使pdf有多个页面。
如果我使用用于Dompdf的page-break-after CSS添加页面,它对解决手头的问题没有任何效果(并且它不会增加PAGE_COUNT)。

class PdfGenerator
{

    public static function generate($type, $resource, $is_stored = false)
    {
        $data = self::getData($type, $resource);
        $pdf = Pdf::loadView('pdf/' . $type, $data);
        
        $font =  $pdf->getFontMetrics()->getFont("helvetica", "normal");
        $canvas = $pdf->getCanvas();
        $canvas->page_text(540, 785, "{PAGE_NUM} / {PAGE_COUNT}", $font, 10, array(0, 0, 0));

        if ($is_stored) {
            $file_name = $type . ' ' . $resource->display_name;
            $pdf->save(storage_path('pdf').'/' . $file_name . '.pdf');
        }

        return $pdf;
    }
}

字符串
大多数主要内容由一个由多个合并的标题和数据组成的表组成(为了更容易保持布局一致)。表内容按行号和单个行高进行解析,以便在刀片中处理的阵列中的多个页面上整齐地分割。
因此,我只是让表格以受控的方式溢出到后续页面中,这在最终生成的PDF中创建了多个页面,除了第一页丢失的page_text的单个细节之外。
从我读到的文档中,这个方法(反对使用CSS)不应该阻止Dompdf正确地注册增加的页面计数,所以我在解决这个问题的时候已经无计可施了。

<html>
    <head>
        {{-- <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"> --}}
        @include('pdf/partials/style')
       
    </head>
    <body>

        {{-- HEADER & FOOTER --}}
        <header>@include('pdf/partials/table-header-invoice')</header>
        <footer>@include('pdf/partials/table-footer-invoice')</footer>

        <main>
            {{-- TITLE --}}
            <h1>{{ucFirst(__('invoice', [], $locale))}}</h1>

            {{-- DETAILS TABLE--}}
            @include('pdf/partials/table-details-invoice')
            <br>

            {{-- CONTENTS TABLE --}}
            @foreach ($pages_array as $page)
                <table style="font-size: 14px">
                    @foreach ($page as $content_type => $contents)
                        @include('pdf/partials/theader-' . $content_type)
                        @include('pdf/partials/tbody-' . $content_type)
                        <br>
                    @endforeach
                </table>
            @endforeach
                
            {{-- <p style="page-break-after: always;"></p>
            <p style="page-break-after: never;"></p> --}}
        </main>
    </body>
</html>

mwngjboj

mwngjboj1#

因为PHP不知道总页数。您必须首先使用output()来获得总数,然后重用output()来获得最终版本。像这样:

$pdf->output();
$font =  $pdf->getFontMetrics()->getFont("helvetica", "normal");
$pdf->getCanvas()->page_text(522, 770, "Page {PAGE_NUM} / {PAGE_COUNT}", $font, 8, array(.5,.5,.5));

Storage::disk('internal')->put(
  'files/' . $fileName,
  $pdf->output()
);

字符串

相关问题