#php #xml #fpdf
#php #xml #fpdf
Вопрос:
Итак, в основном, что я делал, это конвертировал один 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 с помощью функций start, stop и data по отдельности, все они работали нормально.Затем я попытался преобразовать xml в html, все по-прежнему хорошо.Я сталкиваюсь с этой ситуацией в первую очередь при преобразовании в pdf, когда работаю над своей идеей.
Может ли кто-нибудь дать мне несколько советов по этой проблеме?
Комментарии:
1. В вашей
data
функции вы ссылаетесь$pdf->Stuff()
, но переменной нет$parser->Stuff($data)
? или, если эта функция находится внутри вашего класса, то, возможно, она должна быть$this->Stuff($data)
2. Я попытался включить в свой класс пару функций отображения содержимого, таких как stuff() , но wamp предупредил меня, что «невозможно вызвать обработчик start() в …».
3. Дело в том, что мне нужно вызвать пару функций в классе PDF, чтобы отобразить материал в файле pdf.
4.У вас могут быть обработчики в вашем классе, вам просто нужно указать их немного по-другому. Вы можете сделать
xml_set_object ( $parser, $this );
xml_set_element_handler ( $parser, 'start', 'stop' );
xml_set_character_data_handler ( $parser, 'char' );
5. Просто к вашему сведению — FPDF в значительной степени мертв (AFAICT), но TCPDF — очень хорошая и современная альтернатива (и бесплатная): tcpdf.org
Ответ №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' );