TCPDF устанавливает разные заголовки для разных страниц в одном документе - PullRequest
10 голосов
/ 01 марта 2012

Есть ли способ иметь другой логотип заголовка для 1-й страницы в документе и другой для 2-й страницы?

Я думал, что изменение данных заголовка между добавлением страниц может помочь, но вВ моих тестах кажется, что установка заголовка после добавления первой страницы не имеет никакого эффекта:

/* 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 ]

7 голосов
/ 13 марта 2012

Странно. У меня та же проблема, но она работала в моей более старой версии TCPDF: 4.8.009, и я заметил проблему при обновлении до 5.9.149.

Я сравнил 2 и изолировал проблему с помощью функции Header ().

Я мог бы заставить его изменить заголовок и принять его, выполнив это: $ Pdf-> setHeaderTemplateAutoreset (истина);

6 голосов
/ 15 декабря 2012

У меня сработало следующее,

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 голосов
/ 14 марта 2014

Я использовал:

$pdf->resetHeaderTemplate();

Он должен переопределить заголовок шаблона и назначить новый в соответствии с необходимостью.У меня это сработало.

1 голос
/ 01 марта 2012

Как насчет ... сделать так, чтобы TCPDF генерировал страницы с разными заголовками как отдельные документы, а затем использовал что-то для объединения всех этих промежуточных PDF-файлов воедино, чтобы сформировать страницы окончательного документа (возможно, даже сам TCPDF может объединяться, я не знаю)?

Пара "как объединить?"Результаты:

0 голосов
/ 19 августа 2015

Я нашел, что это решение с легким прикосновением:

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 (), могут быть обновлены таким образом.

0 голосов
/ 21 января 2013

Если вы хотите иметь титульную страницу без верхнего и нижнего колонтитула и внутренние страницы с ними, есть более простой способ справиться с этим. Просто отключите печать верхнего и нижнего колонтитула с помощью «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 голосов
/ 01 марта 2012

Только для справки, если у кого-то возникнет такая же проблема в будущем, и он может использовать 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);
...