FPDF - MemImage问题 - OO语法

时间:2012-08-14 18:35:06

标签: php fpdf

require('inc/fpdf.php');
require('inc/mem_image.php');



class PDF extends FPDF
{
    // Colored table
    function FancyTable()
    {
        $this->SetFont('Helvetica','B');
        $this->Cell(27, 4, 'Other Title', 1, 0);
    }  
}


$pdf = new PDF_MemImage();
//$pdf = new PDF();
$pdf->SetFont('Helvetica','',7);
$pdf->AddPage();

$img = file_get_contents('logo.jpg');

$pdf->MemImage($img, 50, 30);
$pdf->Cell(20,10,'Title',1,1,'C');

//$pdf->FancyTable();
$pdf->Output();

我正在尝试将mem_image脚本合并到现有的FPDF页面中。我正在使用一个名为fancyTable的方法来设置我的表数据/布局。不幸的是,尝试调用fancyTable打破了页面(空白)。如果我评论出来,那很好。如果我将$ pdf声明转换为新的PDF()而不是新的PDF_memimage()fancyTable,但显然我的图像不会加载。我认为这可能只是与班级的冲突,但我并不精通OO语法。

1 个答案:

答案 0 :(得分:1)

对此的解决方案实际上非常直接:你扩展了错误的类。

你需要做的就是改变它:

class PDF extends FPDF

......对此:

class PDF extends PDF_MemImage

...然后改变这个:

$pdf = new PDF_MemImage();

......对此:

$pdf = new PDF();

通过扩展FPDF,您已在继承树中基于 trunk FPDF)创建了一个新分支,而您想要做的是基于它现有分支PDF_MemImage

对于记录,命名您的类PDF可能不是一个好主意 - 首先它不是非常具有描述性(它并不表示它继承自FPDF或MemImage),其次它非常短并且会运行如果用作较大应用程序的一部分,则与另一个类发生冲突的风险。我个人称之为FPDF_MemImage_FancyTable,YMMV。

此外,在这个时代,确实没有必要编写兼容PHP4的类。 (说这个,我实际上需要偶尔这样做,但我怀疑你这样做)

修改

如果从上面的描述中不清楚,最终的代码将如下所示:

require('inc/fpdf.php');
require('inc/mem_image.php');

class FPDF_MemImage_FancyTable extends PDF_MemImage
{
    // Colored table
    function FancyTable()
    {
        $this->SetFont('Helvetica','B');
        $this->Cell(27, 4, 'Other Title', 1, 0);
    }  
}

$pdf = new FPDF_MemImage_FancyTable();

$pdf->SetFont('Helvetica','',7);
$pdf->AddPage();

$img = file_get_contents('logo.jpg');
$pdf->MemImage($img, 50, 30);

$pdf->Cell(20,10,'Title',1,1,'C');

$pdf->FancyTable();

$pdf->Output();