Dompdf page_text 使用画布在第一页之后的页面上丢失

问题描述 投票:0回答:1
我正在尝试在页脚中获取页面计数器。为此,我使用了在 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>
    
php laravel dompdf
1个回答
0
投票
因为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() );
    
© www.soinside.com 2019 - 2024. All rights reserved.