Есть ли способ использовать транзакции в TCPDF при расширении с помощью FPDI? - PullRequest
2 голосов
/ 01 апреля 2010

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

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?

Ответы [ 3 ]

5 голосов
/ 09 февраля 2011

Решение, которое я нашел, состояло в том, чтобы использовать клонирование объектов PHP , которое позволяет мне выполнять транзакции и откатывать их обратно в любое время. Вот пример:

$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 будет содержать только "бла-бла-бла".

2 голосов
/ 06 января 2011

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

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

1 голос
/ 07 февраля 2018
$pdf = new FPDI(); 

$pdf->AddPage();

$pdf->startTransaction(true);

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

$pdf->rollbackTransaction(true);

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

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

...