2012-03-01 15 views
10

文書の第1ページに別のヘッダーロゴを付ける方法はありますか?TCPDFが1つの文書の異なるページに異なるヘッダーを設定しました

は、私が追加したページの間でヘッダデータを変更すると、トリックを行うかもしれないと思ったが、私のテストでは、最初のページを追加した後、ヘッダーを設定しても効果がないようです:上記の文書を生成

/* other stuff 
$pdf->setHeaderFont(array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); 
$pdf->setFooterFont(array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); 
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); 
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); 
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); 

$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); 
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); 
$pdf->AliasNbPages(); 
*/ 

$pdf->SetHeaderData("logo_1.png", PDF_HEADER_LOGO_WIDTH, '', ''); 
$pdf->AddPage(); 
$pdf->writeHTML($htmlContent, true, 0, true, true); 

$pdf->SetHeaderData("logo_2.png", PDF_HEADER_LOGO_WIDTH, '', ''); 
$pdf->AddPage(); 
$pdf->writeHTML($htmlContent2, true, 0, true, true); 

を2ページあり、いずれもヘッダーにlogo_1.pngを持っています。

TCPDF自体をカスタマイズする必要がありますか?誰もこれをしましたか?私はバージョン5.9.144を使用しています。

答えて

7

奇妙な。私は同じ問題を抱えていますが、TCPDFバージョンの以前のバージョン(4.8.009)で動作していましたが、5.9.149にアップグレードしたときに問題が発生しました。

私は2を比較し、問題をHeader()関数に分離しました。

これを実行すると、ヘッダーを変更して受け入れることができます。 $ pdf-> setHeaderTemplateAutoreset(true);

+0

優秀、これはまさに私が後であったものです – bububaba

1

どういうわけか... TCPDFで別々のドキュメントとして別々のヘッダーを持つページを生成してから、それらのすべての中間PDFをマージして最終的なドキュメントのページを構成します(おそらくTCPDF自体もマージできます)?

"どのようにマージするのですか?"結果:

+0

私はZend Frameworkをプロジェクトに使用しています。そのため、マージは 'Zend_Pdf'で簡単にできました。私は関連するコードを別の回答として掲示します。ご協力いただきありがとうございます! – bububaba

+0

いくつかの評判を失って申し訳ありませんが、他の解決策はまさに私が探していたものです。 – bububaba

0

念のために、誰かが将来的には同じ問題を抱えているとZend_Pdfを使用することができた場合:

// $filename is the final filename with path to save the generated PDF 
$dir = dirname($filename); 
$base = basename($filename); 

$page1 = $dir . DIRECTORY_SEPARATOR . "tmp_1_" . $base; 
$page2 = $dir . DIRECTORY_SEPARATOR . "tmp_2_" . $base; 

//creates 1st page with TCPDF and saves to filesystem with filename $page1 
$this->generateInvoicePage1($html_1, $page1); 

//creates 2nd page with TCPDF and saves to filesystem with filename $page2 
$this->generateInvoicePage2($html_2, $page2); 

$pdf1 = Zend_Pdf::load($page1); 
$pdf2 = Zend_Pdf::load($page2); 

foreach ($pdf2->pages as $page) { 
    $pdf1->pages[] = clone($page); 
} 

$pdf1->save($filename); 

unlink($page1); 
unlink($page2); 
+0

また、パフォーマンス面では、これは1つのライブラリで1つのドキュメントを生成するよりもかなり遅いようです。 – bububaba

6

以下は私のために働いた、

class MYPDF extends TCPDF{ 
    function header1(){ 
     //print whatever the header 1 is 
    } 
    function Header2(){   
     if($this->page==1){ 
      //print header 1 and whatever the header 2 is 
     }else{ 
      //print just header 2 
     } 
    } 
} 
-1

あなたは、ヘッダーとフッター、それらと内部ページせずにカバーページを持っているしたい場合は、それを処理する簡単な方法があります。次のように は単に「setPrintHeader」と「setPrintFooter」を介して、ヘッダーとフッターの印刷をオフにします。

$pdf->setPrintHeader(false); 
$pdf->setPrintFooter(false); 

$pdf->AddPage(); 
$pdf->SetFont("freesans", "B", 20); 
$pdf->Cell(0,10,"COVER TEXT",1,1,'C'); 

$pdf->setPrintHeader(true); 
$pdf->setPrintFooter(true); 

$pdf->setHeaderFont(array("freesans", "", 9)); 
$pdf->SetHeaderData('', '', 'Document Title', 'Document Header Text'); 
$pdf->AddPage(); 
$pdf->SetFont("freesans", "B", 20); 
$pdf->Cell(0,10,"Internal text",1,1,'C'); 

$pdf->Output("HappyCover.pdf", "I"); 

をお楽しみください!

+0

質問は、ヘッダーに別のロゴを追加する方法で、ヘッダーをすべて一緒に取り除くのではありません。 –

+0

あなたは正しいです。トム、私は誤解しました。ごめんなさい。 – WebOnLife

+0

正しい解決策は、Joaquinが提案したもので、Header()メソッドとFooter()メソッドを上書きします。 – WebOnLife

3

は、私が使用:

$pdf->resetHeaderTemplate(); 

これは、テンプレートのヘッダーをオーバーライドし、必要に応じて新しいものを割り当てる必要があります。それは私のために働いた。

0

私は、これは軽いタッチで解決策であることが判明:

class MYPDF extends TCPDF { 

    //Page header 
    public function AddNewHeader($newTitle) { 
     $this->header_xobj_autoreset = true; 
     $this->header_title = $newTitle; 
    } 

} 

はTCPDFを呼び出してください:: setHeaderData()最初。次に、すべてのAddPage()イベントの前にこの関数を呼び出します。データをループしてtcpdfを使用してページを追加する場合は、すべての要素を追加した後に呼び出します。ヘッダーのキャッシュを解除しますが、ユーザーは各ページに新しいカスタムヘッダーを置くことができます。このようにして、TCPDF :: getHeaderData()によって返されるすべての要素を更新することができます。

関連する問題