FPDF - 内存图像问题 - OO 语法


FPDF - MemImage problems - OO syntax

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 语法。

这个问题的解决方案实际上非常简单:你扩展了错误的类。

您需要做的就是更改它:

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_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();