2

我想知道 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() 之类的东西使用事务。

4

1 回答 1

5

我想要类似的功能并决定使用事务。这在 TCPDF 版本 5.9.125 上。

我从 TCPDF 继承了我自己的 PDF 类并添加了我自己的方法:

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

似乎工作正常。如果没有回滚中的 true ,它会严重中断,因为 writeHTML 似乎在某处存储了许多属性。

可能不需要为当前页面($cp)创建局部变量,因为我认为它已存储。但是,嘿。

如果您要继承编写自己的 Header 和 Footer 函数,则不需要太多额外的工作。

于 2011-11-18T13:22:43.793 回答