2010-03-31 4 views
1

Я использую TCPDF с мостом FPDI. Проблема у меня в том, что как только я использую startTransaction() я получаю следующее сообщение об ошибке:Есть ли способ использовать транзакции в TCPDF при расширении его с помощью FPDI?

TCPDF ERROR: Cannot access protected property FPDI:$numpages/Undefined property: FPDI::$numpages 

и концы сценария (из пресс-формы в методе TCPDF :: Error()).

Вот код, я использую:

$pdf = new FPDI(); 

// add a page 
$pdf->AddPage(); 

$pdf->startTransaction(); 
$pdf->Cell(0, 0, 'blah blah blah'); 
$pdf->rollbackTransaction(); 

$pdf->Output(. time() . '.pdf', 'D'); 

Если изменить его на:

$pdf = new FPDI(); 

// add a page 
$pdf->AddPage(); 

$pdf->Cell(0, 0, 'blah blah blah'); 

$pdf->Output(. time() . '.pdf', 'D'); 

он работает отлично.

Есть ли способ заставить их работать вместе и использовать транзакции TCPDF?

ответ

5

Решение, которое я нашел, должно было использовать PHP's object cloning, что позволяет мне делать транзакции и откатывать их обратно, когда захочу. Вот пример:

$pdf = new FPDI(); 

// add a page 
$pdf->AddPage(); 

$pdf->Cell(0, 0, 'blah blah blah'); 

$_pdf = clone $pdf; 

// do stuff that you may want to revert 
$pdf->Cell(0, 0, 'PDFs suck!'); 

// revert the PDF 
$pdf = $_pdf; 

$pdf->Output(. time() . '.pdf', 'D'); 

PDF будет содержать только «бла-бла-бла».

0

в первом примере вы должны использовать $pdf = $pdf->rollbackTransaction или $pdf->rollbackTransaction(true) вместо того, чтобы просто $pdf->rollabackTransaction()

это потому, что rollbackTransaction принимает булево значение (по умолчанию является ложным), чтобы знать, если он должен вернуть rollbackvalue (false) или установите объект в состояние отката (true).

1
$pdf = new FPDI(); 

$pdf->AddPage(); 

$pdf->startTransaction(true); 

$pdf->Cell(0, 0, 'blah blah blah'); 

$pdf->rollbackTransaction(true); 

$pdf->Output(. time() . '.pdf', 'D'); 

Добавление истинного в качестве параметра в вызове метода транзакции решена проблема для меня.

Смежные вопросы