0
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 声明切换为 new PDF() 而不是 new PDF_memimage() fancyTable 工作,但显然我的图像没有加载。我认为它可能只是与类的冲突,但我并不精通 OO 语法。

4

1 回答 1

1

对此的解决方案实际上非常简单:您扩展了错误的类。

你需要做的就是改变它:

class PDF extends FPDF

...对此:

class PDF extends PDF_MemImage

...然后改变这个:

$pdf = new PDF_MemImage();

...对此:

$pdf = new PDF();

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

作为记录,命名你的类PDF可能不是一个好主意 - 首先它不是很有描述性(它并不表示它继承自 FPDF 或 MemImage),其次它很短并且会冒与另一个类发生冲突的风险如果用作更大应用程序的一部分。我个人会称之为FPDF_MemImage_FancyTableYMMV。

此外,在这个时代,真的没有必要编写与 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();
于 2012-08-14T19:15:52.810 回答