Intereting Posts
Как сделать отчеты с определенным диапазоном дат в mysql Передача значения из скрипта PHP в скрипт Python Нужна помощь в создании запроса на основе значений фильтра ui php, если последний символ является «/», если нет, PHP-эквивалент для javascript escape / unescape Переадресация случайно из index.html в другой файл Проверить, содержит ли строка слово в PHP? Метод Laravel Log useFiles делает запись в журнале несколькими файлами Как получить объект Container из LifecycleEventArgs postLoad в Entity? PHP – Неустранимая ошибка: неподдерживаемые типы операндов Графический дизайн PHPExcel (граница, цвет графа, внутреннее положение графика) Умный перенос слов в PHP для длинных слов? PHP. Проверка наличия или отсутствия индекса массива. Laravel 4 – две кнопки отправки в одной форме и оба отправляются для обработки различными действиями PHP – проверка идентичных значений в многомерном массиве

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 .

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

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

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

Следующие работали для меня,

 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 } } } 

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

 $pdf->resetHeaderTemplate(); 

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

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

Пара «как слиться?» Результаты:

  • Объединение PDF-файлов с помощью PHP
  • Объединение файлов в один PDF-файл с использованием PHP / linux

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

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

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

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

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