2010-12-18 8 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でのものです。

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

が正常に動作するように見えたが。ロールバックで真実がなければ、ひどく壊れます。なぜなら、writeHTMLはどこかのプロパティをたくさん格納しているようです。

現在のページ($ cp)にローカル変数を作成する必要はありません。保存されていると思います。しかしねえ。

とにかく自分のヘッダーとフッターの機能を継承しているなら、それほど余計な作業はありません。

関連する問題