PHP FPDF - «вызов функции-члена Stuff () для необъекта» - PullRequest
0 голосов
/ 02 октября 2011

Итак, в основном я конвертировал один xml-файл в правильно сформированный pdf с wamp. Приведенные ниже коды являются простой иллюстрацией моей идеи. Я изучил процесс парсинга 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 Ответ

1 голос
/ 02 октября 2011

В вашей функции данных вы ссылаетесь на $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' );
...