Функция TCPDF keep Together для хранения контента на 1 странице (генерация PDF) - PullRequest
2 голосов
/ 18 декабря 2010

Мне интересно, есть ли функция сохранения вместе для TCPDF. У меня есть один для FPDF, но я не могу заставить его работать в TCPDF.

Вот как я вижу, как это работает в коде генерации PDF:

// ... PDF code/stuff

// while not kept together
    // add PDF stuff that should be kept together

// .. more PDF code/stuff

Я думаю, что функция вернет false, если новая страница будет добавлена, откатится и затем снова сделает цикл while.

У меня действительно работает следующее, но я бы предпочел, чтобы оно было в функции / методе TCPDF, поэтому его можно было использовать повторно:

$pdf->startTransaction();
$block_page = $pdf->getPage();
$print_block = 2; // max 2 tries

while ($print_block > 0) {
    // do PDF stuff

    if ($pdf->getPage() == $block_page) {
        $print_block = 0;
    } else {
        // rollback
        $pdf = $pdf->rollbackTransaction();
        $pdf->AddPage();
        $block_page = $pdf->getPage();
        -- $print_block;
    }
}

Было бы неплохо, если бы это не зависело от встроенной функциональности транзакций, поэтому транзакции можно использовать в цикле, поскольку такие вещи, как writeHTML (), используют транзакции.

1 Ответ

5 голосов
/ 18 ноября 2011

Я хотел подобную функциональность и остановился на использовании транзакций.Это на TCPDF версии 5.9.125.

Я унаследовал свой собственный класс PDF от TCPDF и добавил свой собственный метод:

public function writeHTMLTogether($html, $ln=true, $fill=false, $reseth=false, $cell=false, $align='') {
    $cp =  $this->getPage();
    $this->startTransaction();

    $this->writeHTML($html, $ln, $fill, $reseth, $cell, $align);

    if ($this->getPage() > $cp) {
         $this->rollbackTransaction(true);//true is very important
         $this->AddPage();
         $this->writeHTML($html, $ln, $fill, $reseth, $cell, $align);           
    } else {            
         $this->commitTransaction();            
    }
}

Кажется, что он работает нормально.Без истинного в откате он ужасно ломается, так как writeHTML, похоже, хранит множество свойств где-то.

Может не потребоваться создание локальной переменной для текущей страницы ($ cp), поскольку я думаю, что она хранится.Но, эй.

Если вы все равно унаследуете написать свои собственные функции верхнего и нижнего колонтитула, не нужно много дополнительной работы.

...