是否有办法在文档中为第一页设置不同的标题徽标,为第二页设置不同的标题?
我认为在添加页面之间更改标题数据可能会有所帮助,但在我的测试中,似乎在添加第一页后设置标题没有效果:
/* 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
。
答案 0 :(得分:7)
奇怪。我遇到了同样的问题,但这在我的旧版TCPDF版本中有效:4.8.009,当我升级到5.9.149时,我注意到了这个问题。
我比较了2并将问题与Header()函数隔离开来。
我可以强制它允许我更改标题并通过运行此接受它: $ PDF-> setHeaderTemplateAutoreset(真);
答案 1 :(得分: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
}
}
}
答案 2 :(得分:3)
我用过:
$pdf->resetHeaderTemplate();
它应该覆盖模板标题并根据需要分配新标题。它对我有用。
答案 3 :(得分:1)
如何...让TCPDF生成具有不同标题的页面作为单独的文档,然后使用某些东西将所有这些中间PDF合并在一起以形成最终文档的页面(甚至TCPDF本身可以合并,我不知道) ?
一些“怎么合并?”结果:
答案 4 :(得分: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);
答案 5 :(得分: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()返回的所有元素。
答案 6 :(得分:0)
我的解决方案,只有一个条件
function Header(){
if($this->page==1){
$html = '<div><img src="./outils/img1.png" alt=""></div>';
$this->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true);
}else{
$html = '<div><img src="./outils/img2.png" alt=""></div>';
$this->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true);
}
}
答案 7 :(得分:-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");
享受!