我想知道TCPDF是否有一个保持在一起的功能.我有一个FPDF,但我不能让它在TCPDF中工作.
以下是我在PDF生成代码中看到的工作方式:
// ... PDF code/stuff
// while not kept together
// add PDF stuff that should be kept together
// .. more PDF code/stuff
Run Code Online (Sandbox Code Playgroud)
我认为如果添加了新页面,该函数将返回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;
}
}
Run Code Online (Sandbox Code Playgroud)
如果它不依赖于内置的事务功能也很酷,因此可以在循环中使用事务,因为像writeHTML()这样的事情使用事务.
小智 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();
}
}
Run Code Online (Sandbox Code Playgroud)
似乎工作正常.由于writeHTML似乎在某处存储了许多属性,因此如果没有回滚中的真实,它就会崩溃.
可能不需要为当前页面($ cp)创建局部变量,因为我认为它已存储.但是,嘿.
如果您继承自己编写自己的页眉和页脚功能,那么就不需要额外的工作了.