2012-11-22 2 views
0

프로젝트 작업 중이고 FPDF를 사용하여 제품 세부 정보의 pdf를 생성해야합니다. 제품 세부 정보는 배열로 전달되며 다음과 같이 배열 '$ prod_details'의 각 변수 요소를 'PDF'클래스의 함수에 가져 오려면 다음이 필요합니다.PHP : 배열 요소를 fpdf의 클래스 함수로 전달

전달 방법 변수 배열 요소 :

$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 
} 
?> 
아래의 코드를 찾을 수

도움을 얻기를 바랍니다.

답변

0

귀하의 질문은 다소 모호합니다. 당신이 성취하려는 것을 구체적으로 물어 보는 것이 도움이 될 것입니다.

하지만 내가 처음으로 보게되는 것은 fpdf 클래스의 하위 클래스인데, pdf로하고 싶은 모든 작업을 수행 할 함수를 작성할 필요가 없다는 것입니다. 재정의 (또는 확장) 할 클래스의 머리글과 바닥 글 부분 만 확장하면됩니다.

머리글과 바닥 글을 확장 한 다음 클래스를 닫습니다. 새 fpdf 클래스의 $ pdf 인스턴스를 만든 다음 데이터로 해당 객체를 조작하십시오. 이 데이터를 전혀 전달할 필요가 없습니다. 예를 들어

:

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

그 (내가, 내가 시간이 많은 한 적이없는 이유를 볼 수 있지만) 당신이 원하는 것을 달성하지 않는 경우

또는, 당신이 할 수있는 항상 생성자를 오버라이드한다. 배열 (또는 생성 한 사용자 정의 객체)을 전달하고이를 개인 변수에 저장합니다.

+0

시간을내어 도와 주셔서 감사합니다. 나는 질문을 다시 편집했으며, 지금은 더 구체적이다. 코드를 다시 읽은 후 코드를 통해 진행할 과제를 이해했으면합니다. 감사합니다. –

+0

오케이. 우선, setData를 호출하고 있지만이 함수를 정의하지 않았습니다. 당신이 createData를 호출 한 것 같습니다. 둘째, 네이밍 충돌이 발생했습니다. $ prod_data의 클래스 속성에 액세스하려는 경우 $ this-> prod_data [ 'whatever_key']를 사용해야합니다. 그래서 $ this-에 변수 참조를 변경 한 후, createData에 메서드 호출을 변경하려고 있는지 실제로 사용하려는 데이터를 포함 할 배열에 위해서 var_dump를 수행하고> prod_data 대신 $ prod_data의. – Ryan

+0

도움을 주셔서 대단히 감사드립니다. 메서드 이름을 수정하고 클래스 속성에 액세스하는 방법을 수정했지만 데이터베이스 연결 스크립트 (db.php)가 포함되어 있지 않고 모든 것이 제대로 작동 할 때까지 빈 배열을 가져 오는 것이 아닙니다. 다시 한번 감사합니다. –