【问题标题】:TCPDF keep together function to keep content on 1 page (PDF generation)TCPDF 保持在一起功能以将内容保持在一页上(PDF 生成)
【发布时间】:2010-12-18 02:25:29
【问题描述】:

我想知道是否有用于 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() 这样的东西使用事务。

【问题讨论】:

    标签: php pdf tcpdf


    【解决方案1】:

    我想要类似的功能并决定使用事务。这在 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 函数,则不需要太多额外的工作。

    【讨论】:

      猜你喜欢
      • 2014-10-24
      • 1970-01-01
      • 2015-01-04
      • 1970-01-01
      • 2022-10-04
      • 2011-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多