FPDF不支持继承进行协作。

3
我有两个代码示例。一个可以正常运行,但第二个(使用extend创建新类包装器)不能正常工作。

请注意,下面的示例已经大大简化了。

方法1

page.php:

<?php

include("fpdf.php");
$pdf = new FPDF;
$pdf->AddPage();
$pdf->SetFont('Arial','',11);
$pdf->Output();

?>

这个工作正常。它创建了一个空白页面。

方法二

然后,通过继承使用FPDF时,我遇到了错误(请参见下面的代码块)。

myPDF.php:

<?php

require ("fpdf.php");

class myPDF extends FPDF {

    function createMyPage() {
        $this->AddPage();
        $this->SetFont('Arial','',11);
        $this->Output();
    }

}

?>

page.php:

<?php

include("myPDF.php");
$pdf = new myPDF;
$pdf->createMyPage();

?>

这种方法会产生以下PHP警告和FPDF错误:

警告:in_array()函数期望参数2是数组,但却得到了null,在/var/www/fpdftest/fpdf.php的第526行

FPDF错误:未定义的字体:helvetica

你知道我在这里错过了什么吗?

1
我不相信FPDF仍然得到支持;然而,TCPDF是它的逻辑继承者(也是免费的)。如果可能的话(我知道在遗留代码中这并不总是可行),请切换到TCPDF。(编辑:我看到他们的论坛有最近的回复,所以也许它并没有像我想象的那么死,但我清楚地记得作者建议人们切换到TCPDF。) - Jared Farrish
1
另外,为了尝试回答你的问题,你可能想要调用$this->FPDF($orientation,$unit,$size);构造函数:http://www.fpdf.org/en/tutorial/tuto6.htm - Jared Farrish
还有,这是两个不同的错误吗?还是说只是一个警告和一个FPDF错误? - Jared Farrish
谢谢Jared,第二个解决方案正是所需的。两个错误都是由同一原因引起的。我也很感激你指出了TCPDF。我之前不知道它,我肯定会尝试一下。 - BudwiseЯ
没问题,我已经把它作为答案添加了进去。就像我说的那样,FPDF可能不是无效的(至少论坛上并没有表明它不受支持)。我真的很喜欢TCPDF,但FPDF也有它的用途。 - Jared Farrish
1个回答

6
创建您的包装类时,请确保调用父构造函数:
<?php // Always use the full <?php open tag

require ("fpdf.php");

class myPDF extends FPDF {

    // Or, __construct() if you only care about PHP5
    function myPDF($orientation='P', $unit='mm', $size='A4') {
        // Call parent constructor
        $this->FPDF($orientation,$unit,$size);
        // Initialization
        $this->B = 0;
        $this->I = 0;
        $this->U = 0;
        $this->HREF = '';
    }

    function createMyPage() {
        $this->AddPage();
        $this->SetFont('Arial','',11);
        $this->Output();
    }

}

http://fpdf.org/en/tutorial/tuto6.htm


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接