PHP Fpdf 库:在 header 中为 PDF 中的每一页嵌入徽标图像

PHP Fpdf library: Embedding logo image in the header for every page in the PDF

我正在做一个 PHP 项目。我需要在我的应用程序中使用 FPDF 库 http://www.fpdf.org/ 生成 PDF。但是我在将徽标图像嵌入每个页面的 header 时遇到问题。

这是我的代码:

    $fontFamily = "Helvetica";
    $pdf = new Fpdi();
    $pdf->SetFont($fontFamily,'',8);
    $pdf->AliasNbPages();
    $pdf->AddPage();
    //logo at the top of the page.
    $pdf->Image('img/logo.png', 125, 10, 73, 15);
    //loop through the array and render the list
    for($i=1;$i<=100;$i++)
        $pdf->Cell(0,5,'Printing line number '.$i,0,1);
    $pdf->Output();

如您在我的代码中所见,我按照文档中的示例在 header 中呈现徽标。这会在 PDF 的开头添加徽标。但这有一个问题。如您所见,我正在遍历数组并在 PDF 中呈现列表。不知道要多久,数据才会动态化。

但如果需要,它会自动为列表创建新页面。但问题是新创建的页面(第二个)页面顶部没有 header 徽标。如何在每个页面的 header 中嵌入徽标,并且它会自动添加到新页面?

您需要定义一个 Header() 方法,每次添加新页面时 FPDF 都会自动 运行 方法(使用 AddPage() 手动或自动)。

为此,您需要 subclass FPDF class,并使用适当的 [=13] 创建另一个 class =]方法:

class WaiYanHeinPDF extends FPDF {
    public function Header() {
        parent::Header();
        // Add the logo here.
    }
}

参见relevant manual page


我开发了这样一个子class,允许在运行时指定头函数。我忘记了香草 FPDF 没有 setHeader() 函数:对此表示歉意。这就是我所做的:

class MyPDF extends FPDF {

    private $onHeader;

    public function setHeader(Callable $func) {
        $this->onHeader = $func;
        return $this;
    }

    public function Header() {
        parent::Header();
        if ($this->onHeader) {
            call_user_func($this->onHeader, $this);
        }
    }
}

只有那时我才能做(因此我之前的错误答案):

$MyPdf->setHeader(function($pdf) {
    ...
});

无需为我需要的每个不同的 PDF 创建新的 class。我只是创建了不同的 MyPDF() 实例。