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

既存の FPDF ページに mem_image スクリプトを組み込もうとしています。fancyTable というメソッドを使用して、テーブル データ/レイアウトを設定しています。残念ながら、fancyTable を呼び出そうとすると、ページが壊れます (空白)。コメントアウトしても大丈夫です。$pdf 宣言を new PDF_memimage() の代わりに new PDF() に切り替えると、fancyTable は機能しますが、明らかに画像が読み込まれません。おそらくクラスとの競合だと思いますが、OO構文に精通していません。

4

1 に答える 1

1

これに対する解決策は実際には非常に簡単です。間違ったクラスを拡張しています。

それを修正するために必要なのは、これを変更することだけです:

class PDF extends FPDF

...これに:

class PDF extends PDF_MemImage

...そしてこれを変更します:

$pdf = new PDF_MemImage();

...これに:

$pdf = new PDF();

を拡張することで、トランク( ) にFPDF基づいて継承ツリーに新しいブランチを作成しましたが、実行したいのは既存のブランチに基づくことです。FPDFPDF_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 に答える