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
.
Ответы
Ответ 1
Странно. У меня такая же проблема, но это работало в моей старой версии TCPDF версии: 4.8.009, и я заметил проблему, когда обновился до 5.9.149.
Я сравнил 2 и изолировал проблему с функцией Header().
Я могу заставить его изменить заголовок и принять его, запустив это:
$ Pdf- > setHeaderTemplateAutoreset (истина);
Ответ 2
Следующие работали для меня,
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
}
}
}
Ответ 3
Я использовал:
$pdf->resetHeaderTemplate();
Он должен переопределить заголовок шаблона и назначить новый в соответствии с необходимостью. Это сработало для меня.
Ответ 4
Как насчет... TCPDF генерирует страницы с разными заголовками в виде отдельных документов, а затем использует что-то, чтобы объединить все эти промежуточные PDF файлы вместе, чтобы сформировать окончательные страницы документа (возможно, даже сам TCPDF может объединиться, я не знаю)
Пара "как слиться?" Результаты:
Ответ 5
Только для записи, если у кого-то такая же проблема в будущем и может использовать 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);
Ответ 6
Я нашел это решение с самым легким прикосновением:
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(), могут быть обновлены.
Ответ 7
Если вы хотите иметь титульную страницу без верхнего и нижнего колонтитула и внутренних страниц с ними, есть более простой способ ее обработки.
Просто отключите печать верхнего и нижнего колонтитула с помощью "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");
Наслаждайтесь!