0

プロジェクトに取り組んでおり、FPDFを使用して製品の詳細のpdfを生成する必要があります。製品の詳細は配列に渡されます。以下に示すように、配列'$ prod_details'の各変数要素をクラス'PDF'内の関数に取り込むには、次のものが必要です。

変数配列要素を渡そうとした方法の例:

    $this->Cell(30,8,$prod_data['prod_name'],0,0,'C');
    $this->Cell(30,10,$prod_data['company_name']);
    $this->Cell(20,8,$prod_data['prod_cost'],0,0,'C');

このスクリプトを実行しようとしましたが、「空のプロパティにアクセスできません」というエラーメッセージが表示され続けます...

以下のコードを見つけてください

<?php

@include_once("includes/db.php");
require('fpdf/fpdf.php');
@include_once("includes/class_product_info.php");

$obj = new allProducts();
$prod_data = array();
if(isset($_GET['c_id'])){
        $prod_data = $obj->getProdDetails($_GET['c_id']);

class PDF extends FPDF
{   


public $prod_data;

public function createData($input){
    $this->prod_data = $input;
}

function Header()
{
    // Logo
    $this->Image('big_logo.png',10,6,30);
    // Arial bold 15
    $this->SetFont('Arial','B',20);
    // Move to the right
    $this->Cell(40);    
    // Title
    $this->Cell(30,10,$this->prod_data['company_name']);
    // Draw an header line
    $this->Line(10,26,200,26);
    // Line break
    $this->Ln(20);
}

function Footer()
{
    // Position at 1.5 cm from bottom
    $this->SetY(-15);

    // Begin with regular font
    $this->SetFont('Arial','',9);
    // Then put a blue underlined link
    //$this->SetTextColor(0,0,255);
    $this->SetFont('','U');
    $this->Write(10,$this->prod_data['company_name'],'http://www.skills.com');
    // Arial italic 8
    $this->SetFont('Arial','I',9);
    // Page number
    $this->Cell(0,10,'Page '.$this->PageNo().' ',0,0,'R');
}

function prodDetailTop()
{
// Course title cell
$this->Cell('',10,'',0,0,'C');
$this->Ln();

/* Build cells for the first row */

$this->SetFont('Arial','',10);
$this->SetY(40);

// First Row
$this->Cell(35,8,'Product Name : ',0,0,'L');
$this->Cell(30,8,$this->prod_data['prod_name'],0,0,'C');
$this->SetX(150);
$this->Cell(25,8,'Product Cost : ',0,0,'L');
$this->Cell(20,8,$this->prod_data['prod_cost'],0,0,'C');
$this->Ln();

// Second Row
$this->Cell(35,8,'Discount : ',0,0,'L');
$this->Cell(30,8,$this->prod_data['disc_amt'],0,0,'L');
$this->SetX(150);
$this->Cell(25,8,'No Purchased : ',0,0,'L');
$this->Cell(20,8,$this->prod_data['items_count'].' product(s)',0,0,'L');
$this->Ln();
}


function prodDetailBtm()
{

$this->SetY(80);

$this->Write(10,$this->prod_data['prod_desc']);

}

function generatePageData()
{
    $this->AddPage();
    $this->prodDetailTop();
    $this->prodDetailBtm();
}
}

$pdf = new PDF();
$pdf->createData($prod_data);
//$pdf->Header();

$pdf->generatePageData();
$pdf->Output();

}
else {

?>
    <script language="javascript">
    window.location = "prod_invoice_err.php";
    </script>
<?php
}
?>

助けを得たいと思っています。

4

1 に答える 1

0

あなたの質問は少し曖昧です。何を達成しようとしているのかを具体的に尋ねると役に立ちます。

しかし、私が最初に目にするのは、fpdfクラスのサブクラスであり、pdfで実行したいすべてのことを実行するための関数を作成する必要がないということです。ヘッダーやフッターなど、オーバーライド(または拡張)しているクラスの部分のみを拡張する必要があります。

したがって、それを拡張し、ヘッダーとフッターを操作してから、クラスを閉じます。新しいfpdfクラスの$pdfインスタンスを作成し、そのオブジェクトをデータで操作します。そのデータを「渡す」必要はまったくありません。

例えば:

$pdf->Ln(10);
$pdf->Cell($w,9,$title,1,1,'C',true); //from fpdf tutorial

または、それでも目的が達成されない場合(理由はわかりませんが、これを何度も実行しました)、いつでもコンストラクターをオーバーライドできます。配列(または作成したカスタムオブジェクトのイベント)を渡し、それをプライベート変数に格納します。

于 2012-11-22T17:22:21.750 に答える