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.
}
}
我开发了这样一个子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() 实例。
我正在做一个 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.
}
}
我开发了这样一个子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() 实例。