2010-12-18 60 views
2

我想知道是否有一個TCPDF一起保持功能。我有一個FPDF,但我不能讓它在TCPDF中工作。TCPDF保持在一起的功能,以保持內容在1頁(PDF生成)

以下是我看到它的工作的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()這樣的事務使用事務。

回答

5

我想要類似的功能,並使用交易結算。這在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)創建一個局部變量,因爲我認爲它存儲了。但是,嘿。

如果您繼承編寫自己的頁眉和頁腳函數,無需多做額外的工作。