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>
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()
);