开发者

TCPDF keep together function to keep content on 1 page (PDF generation)

I'm wondering if there's a keep together function for TCPDF. I have one for FPDF, but I can't get it to work in TCPDF.

Here's how I see it working within the PDF generation code:

// ... PDF code/stuff

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

// .. more PDF code/stuff

I'm thinking the function would return false if the a new page was added, roll back and then do the while loop again.

I do have the following working, but I'd rather it was in a function/method of TCPDF so it was more reusable:

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

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

    if ($pdf->getPage() == $开发者_如何学JAVAblock_page) {
        $print_block = 0;
    } else {
        // rollback
        $pdf = $pdf->rollbackTransaction();
        $pdf->AddPage();
        $block_page = $pdf->getPage();
        -- $print_block;
    }
}

It would also be cool if it didn't depend on the built in transaction functionality so transactions can be used within the loop, since things like writeHTML() use transactions.


I wanted similar functionality and settled on using transactions. This on TCPDF version 5.9.125.

I inherited my own PDF class from TCPDF and added my own method:

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();            
    }
}

Seemed to work fine. Without the true in the rollback it breaks horribly, as writeHTML seems to store lots of properties somewhere.

May not need to create a local variable for current page ($cp) as I think it's stored. But hey.

If you're inheriting to write your own Header and Footer functions anyway, not much extra work.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜