PHP FPDF - “在非对象上调用成员函数Stuff()”

时间:2011-10-01 20:50:33

标签: php xml fpdf

基本上我一直在做的是将一个xml文件转换为带有wamp的格式良好的pdf。 下面的代码简单说明了我的想法。我从解析xml到html的过程中学到了什么,我想这就是告诉xml解析器你想要在屏幕上显示的方式。所以我就像下面这样做了:

<?php 
 require('fpdf.php');

 class PDF extends FPDF
 {
   //...I skipped couple of functions like Footer()

   //Display stuff from string in pdf manner
   function Stuff($data)
   {
       $this->SetFont('Arial','',12);
       $this->Cell(0,4,"$data",0,1,'L',true);
       $this->Ln(1);
   }
 }

 //Parse xml start tags
 function start($parser,$element_name,$element_data)
 {
      ......
 }    

 //Parse xml end tags
 function stop($parser,$element_name)
 {
      ......
 }

 //Parse xml contents between start tags and end tags
 function data($parser,$data)
 {
      $pdf->Stuff($data);
 }

 //create pdf page
 $pdf = new PDF();
 $pdf->AliasNbPages();
 $pdf->AddPage();
 $pdf->SetFont('Times','',12);

 //Parse xml file to pdf
 $parser=xml_parser_create();
 xml_set_element_handler($parser,"start","stop");
 xml_set_character_data_handler($parser,"char");
 $fp=fopen("test.xml","r");

 while($data=fread($fp,4096))
 {
     xml_parse($parser,$data,feof($fp)) or 
     die (sprintf("XML Error:$s at line $d",
     xml_error_string(xml_get_error_code($parser)),
     xml_get_current_line_number($parser)));
 }

 xml_parser_free($parser);

?>

不幸的是我收到了这个警告,正如我在标题中所描述的那样。但是,我用我的启动,停止和数据函数单独测试了我的xml解析器函数,它们都运行正常。然后我尝试将xml转换为html,一切都还是好的。它主要转换为pdf,我在处理我的想法时会遇到这种情况。 谁能给我一些关于这个问题的提示?

1 个答案:

答案 0 :(得分:1)

在您的数据函数中,您引用$pdf->Stuff()但没有变量$pdf,这就是您看到错误的原因。因为$pdf不是对象,因为它不存在。你是说$parser->Stuff($data)吗?或者如果该函数在您的类中,那么它可能应该是$this->Stuff($data)

您可以在班级中使用处理程序,只需要稍微指定一下即可。你可以做到

xml_set_object ( $parser, $this );
xml_set_element_handler ( $parser, 'start', 'stop' );
xml_set_character_data_handler ( $parser, 'char' );