2012-03-01 55 views
10

有沒有辦法有一個文檔中的第1頁對於第2頁不同的頁眉標識和不同?TCPDF設置不同的頁眉

我認爲改變添加頁面之間的標題數據可能做的伎倆,但在我的測試中,它似乎將第一頁之後設置標題沒有效果:

/* 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 2012-03-13 11:21:48

1

......怎麼有TCPDF生成具有不同標題作爲單獨的文檔頁面,然後使用的東西,所有這些中間PDF文件合併在一起,以形成最終的文檔頁面(甚至TCPDF本身可以合併,我不知道)?

一對夫婦的「如何合併?」結果:

+0

我對項目使用Zend Framework,所以合併很容易做到'Zend_Pdf'。我將發佈相關代碼作爲單獨的答案。謝謝你的幫助! – bububaba 2012-03-01 09:35:17

+0

對不起,我拿了一些聲望,另一種解決方案正是我一直在尋找的。 – bububaba 2012-03-13 11:20:16

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

此外,性能方面,這似乎比用一個庫生成一個文檔要慢很多,所以要小心。 – bububaba 2012-03-01 10:33:01

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

問題是如何在標題中添加不同的徽標,而不是將標題全部刪除。 – 2013-01-21 10:50:44

+0

你是對的湯姆,我誤解了。抱歉。 – WebOnLife 2013-01-22 10:19:34

+0

Joaquin建議覆蓋Header()和Footer()方法的正確解決方案。 – WebOnLife 2013-01-22 10:20:36

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()返回的元素都可以用這種方式更新。