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");

Наслаждайтесь!