i have this code generating a styled table but uses php to grab info for the table from a database.
<form name="pt_list" action="classes/MYPDF.php" method="post"><br/>
<input type="submit" name="pdf" value="Download as PDF">
</form>
<?php
ob_start();
?>
<table id=patients>
<tr>
<th>Pt. username</th>
<th>Pt. number</th>
<th>Full Name</th>
<th>Added on</th>
</tr>
<?php $x=1;
foreach ($users as $patient) {
?> <tr <?php if ($x % 2 == 0) {echo "class='alt'"; } ?>>
<td> <?php echo $patient['username'];?></td>
<td> <?php echo $patient['id'];?></td>
<td> <?php echo $patient['name'];?></td>
<td> <?php echo $patient['joined'];?></td>
</tr>
<?php
$x++;
} ?>
</table>
<?php
$GLOBALS['table'] = ob_get_clean();
$table = $GLOBALS['table'];
?>
i am trying to grab this table and offer it to users to download as a pdf. i tried tcpdf and fpdf but always keep getting cannot send pdf, output already sent. Here is my code for MYPDF.php:
<?php
//============================================================+
// File name : example_003.php
// Begin : 2008-03-04
// Last Update : 2013-05-14
//
// Description : Example 003 for TCPDF class
// Custom Header and Footer
//
// Author: Nicola Asuni
//
// (c) Copyright:
// Nicola Asuni
// Tecnick.com LTD
// www.tecnick.com
// info#tecnick.com
//============================================================+
/**
* Creates an example PDF TEST document using TCPDF
* #package com.tecnick.tcpdf
* #abstract TCPDF - Example: Custom Header and Footer
* #author Nicola Asuni
* #since 2008-03-04
*/
// Include the main TCPDF library (search for installation path).
require_once('../tcpdf/tcpdf.php');
// Extend the TCPDF class to create custom Header and Footer
class MYPDF extends TCPDF {
//Page header
public function Header() {
// Logo
$image_file = K_PATH_IMAGES.'logo_example.jpg';
$this->Image($image_file, 10, 10, 15, '', 'JPG', '', 'T', false, 300, '', false, false, 0, false, false, false);
// Set font
$this->SetFont('helvetica', 'B', 20);
// Title
$this->Cell(0, 15, '<< TCPDF Example 003 >>', 0, false, 'C', 0, '', 0, false, 'M', 'M');
}
// Page footer
public function Footer() {
// Position at 15 mm from bottom
$this->SetY(-15);
// Set font
$this->SetFont('helvetica', 'I', 8);
// Page number
$this->Cell(0, 10, 'Page '.$this->getAliasNumPage().'/'.$this->getAliasNbPages(), 0, false, 'C', 0, '', 0, false, 'T', 'M');
}
}
// create new PDF document
$pdf = new MYPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
// set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('Nicola Asuni');
$pdf->SetTitle('TCPDF Example 003');
$pdf->SetSubject('TCPDF Tutorial');
$pdf->SetKeywords('TCPDF, PDF, example, test, guide');
// set default header data
$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING);
// set header and footer fonts
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
// set margins
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
// set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
// set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
// set some language-dependent strings (optional)
if (#file_exists(dirname(__FILE__).'/lang/eng.php')) {
require_once(dirname(__FILE__).'/lang/eng.php');
$pdf->setLanguageArray($l);
}
// ---------------------------------------------------------
// set font
$pdf->SetFont('times', 'BI', 12);
// add a page
$pdf->AddPage();
// set some text to print
// print a block of text using Write()
$pdf->writeHTML($GLOBALS['table'], true, false, true, false, '');
// ---------------------------------------------------------
//Close and output PDF document
$pdf->Output('example_003.pdf', 'D');
//============================================================+
// END OF FILE
this is the error i get: Notice: Undefined index: table in /Users/Tika/PhpstormProjects/ooplr/classes/MYPDF.php on line 105
TCPDF ERROR: Some data has already been output, can't send PDF file.
Any input would be greatly appreciated.
Notice: Undefined index: table in /Users/Tika/PhpstormProjects/ooplr/classes/MYPDF.php on line 105
This means that $GLOBALS['table'] is undefined, holds no data. What happens when you change the writeHTML row to something like 'test' instead of $GLOBALS['table']?
Are you sure the variable is filled with the table HTML in the first place? Try going to the top of mypdf.php and write var_dump($GLOBALS['table']); exit; after the initial < ?php tag. Does it output anything?
TCPDF ERROR: Some data has already been output, can't send PDF file.
This is due to the fact that you can't generate and output a PDF if you already printed something out in the document. In this case, I think it's a follow on error since an error has been outputed to the document, you can't make it a pdf any longer. It may also have to do with something as stupid as a whitespace character before the initial < ?php.
If I understand the situation correctly, I think your problem is moving the table data from the html file to MYPDF.php. If that's the case, I'd consider an alternative solution:
<form name="pt_list" action="classes/MYPDF.php" method="post"><br/>
<?php foreach ($users as $patient) {
echo '<input type="hidden" name="patients[]" value="'.$patient['id'].'">';
} ?>
<input type="submit" name="pdf" value="Download as PDF">
</form>
This will give you a hidden input field for every patient, and let's you send forth the data to the form target (in this case, mypdf.php). Since I'm using [ ] in the name field, php will recognize many fields can use this name and will make the result an array. In mypdf.php you can now reach this data through the magic variable $_POST['patients']. You can foreach this data or reach the data individually like so: $_POST['patients'][0] ... [1] etc...
You can do the same to get the username, name, joined data through as well, or you can use the ID to fetch the data from the database again. If you get this far, I'm sure you'll figure out the rest on your own.
This is my first response so please let me know if I'm not being helpful, or let me know if there's anything you don't understand.
Related
When I try to print variable "$ime", it just prints "Student: " on pdf file.
I have tested it on html and it works fine displaying whole thing as is should.
Sql result is not empty and it's just one row that displays name and last name. So normal output should be "Student: John Doe"
// Page header
function Header()
{
$db2 = new dbObj();
$connString2 = $db2->getConnstring();
mysqli_set_charset($connString2,'UTF-8');
$aaa = mysqli_query($connString2, "SELECT s.ime,s.prezime FROM Student s WHERE s.mbr='".$mbr."'") or die("database error:". mysqli_error($connString2));
$row=mysqli_fetch_row($aaa);
$ime ="Student: ".$row[0]." ".$row[1];
// Logo
$this->Image('img/logo.png', 85, 15, 30, '', 'PNG', '', 'T', false, 300, 'C', false, false, 0, false, false, false);
$this->SetFont('Arial','B',13);
// Move to the right
$this->Cell(80);
// Title
$this->SetFont('Arial','B',15);
$this->Cell(20,80,'Lista polozenih ispita',0,0,'C');
$this->Ln(10);
$this->Cell(80);
$this->SetFont('Arial','B',10);
$this->Cell(20,80,$ime,0,0,'C');
// Line break
$this->Ln(50);
}
Edit: It's not about variable scoping I have tried but it doesn't affect it in any way.
I am trying to generate a pdf form through below given script. When I generate the pdf file it only printing header and footer. I am unable to print values from database. db.php and fpdf.php are correct. Output is attached Please help.
<?php
include "includes/db.php";
require('includes/fpdf/fpdf.php');
class PDF extends FPDF
{
// Page header
function Header()
{
// Logo
$this->Image('assets/img/find_user.png',10,6,30);
// Arial bold 15
$this->SetFont('Arial','B',12);
// Move to the right
$this->Cell(80);
// Title
$this->Cell(60,10,'Shekhat test',0,0,'C');
// Line break
$this->Ln(8);
$this->SetFont('Arial','B',7);
$this->Cell(220,10,'Pune, Maharashtra',0,0,'C');
$this->Ln(30);
$this->SetDrawColor(188,188,188);
$this->Line(0,45,350,45);
}
// Page footer
function Footer()
{
// Position at 1.5 cm from bottom
$this->SetY(-15);
// Arial italic 8
$this->SetFont('Arial','I',8);
// Page number
$this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
}
}
// Instanciation of inherited class
$pdf = new PDF();
$pdf->AliasNbPages();
$pdf->AddPage();
$pdf->SetFont('Times','',12);
if(isset($_GET['print_slider'])){
$get_id = $_GET['print_slider'];
$result="SELECT * FROM homeslider WHERE banner_id='$get_id'";
//$result="SELECT * FROM homeslider";
$rows = mysqli_query($con, $result);
while($row=mysqli_fetch_array($rows, MYSQLI_ASSOC))
{
$pdf->Cell(0,10,'Banner id:' ,$row['banner_id']);
$pdf->Ln();
$pdf->Cell(0,10,'Banner Title:' ,$row['banner_title']);
$pdf->Ln();
$pdf->Cell(0,10,'Banner Image:' ,$row['banner_image']);
}
}
$pdf->Output();
?>
The problem is when you call the Cell method:
$pdf->Cell(0,10,'Banner id:' , $row['banner_id']);
you need to replace the comma with a period..!
So this will work:
$pdf->Cell(0,10,'Banner id:' . $row['banner_id']);
I want to send some html content via jQuery to tcpdf and create an pdf.
I have this in my index.php:
$('#test').click(function() {
var result='hello';
$.ajax({
type: 'POST',
url: 'pdf.php',
data: {result: result},
});
})
and the pdf.php:
<?php
$result = '';
if(isset($_POST['result'])) {
$result = $_POST['result'];
}
require_once('tcpdf/tcpdf.php');
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetTitle('Production sheet');
$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH);
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
$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->SetFont('helvetica', '', 9);
$pdf->AddPage();
$html = '
<h1>TEST</h1>
<table>
<tr><td>'.$result.'</td></tr>
</table>
';
$pdf->writeHTML($html, true, 0, true, 0);
$pdf->lastPage();
$pdf->Output('test.pdf', 'I');
?>
If I define variable result ($result = "Hello";) and i run directly pdf.php it's working perfect. It seems that for some reason my post isn't taken by pdf.php... Some ideas?
Thank you!
I did say I'm too tired. As #andrew pointed out you were using inline output instead of download and in an Ajax call that won't really work. Reading through the comments if you want to Download the PDF and POST values to it here is my suggestions:
1) Create a FORM in your HTML
<form action='pdf.php' method=post target=_blank id=myform>
</form>
2) If you need to add data with Javascript then change your jQuery code as follow:
$('#test').click(function() {
var result='hello';
$("#my_form").append("<input type=hidden name=result value='"+result+'>");
$("#my_form").submit();
});
3) Adjust the pdf.php to use $_POST instead of $_GET
You should consider if you really need an jQuery for this. If the result variable in your javascript get populated from user inputted form values you might just re-design your page and include all that in the form without the need of any additional jQuery at all.
You're using
$pdf->Output('test.pdf', 'I');
I meaning destination: Inline. See the manual
You either have to use option F and specify a file name on the server then redirect the user to that filename or use option D to force a download.
Something like:
$('#test').click(function() {
var result='hello';
window.open('/pdf.php?result='+result, '_blank');
});
And
<?php
$result = '';
if(isset($_GET['result'])) {
$result = $_GET['result'];
}
.....
$pdf->Output('test.pdf', 'D');
EDIT
For large amounts of data you would be better to use the ajax method you were experimenting with, but handling the returned pdf document in the ajax response would be tricky, it is probably doable with a javascript file reader
As simpler option would look something like this:
$('#test').click(function() {
var result='hello';
$.ajax({
type: 'POST',
url: 'pdf.php',
data: {result: result},
}).done(function(filename){
$('#testDiv').html('<a target="_blank" href="/'+filename+'">download your pdf</a>');
});
})
And
<?php
$result = '';
if(isset($_POST['result'])) {
$result = $_POST['result'];
}
....
$filename = time().'.pdf';
$pdf->Output($filename, 'F');
echo $filename;
so whats happening is you're creating pdf files on the server and appending a link to the page using ajax, its not the best solution as it leaves all pdf files on the server and the user only gets to see the link once.
Should hopefully give you some ideas though.
I've been struggling with the header and footer data for quite some time now and thought it was time to ask it here on the forum.
What I'm trying to do is decide that if a page is added if the header / footer should be added or not. so code-wise I want to set the header/footer to on or off when adding a page.
I've tried to manipulate the function AddPage by setting an extra argument $setFooterHeader which default is set to true. And then trying to set this argument to false whenever I do an addPage('','',false); but it ignores it for some reason and I can't figure out why.
If I set the default value of the argument to false in the function itself it works like a charm, but when I try to do it in my script and set it as an argument, it totally ignores it.
Here's a code snippet of the fpdf.php file (function addPage)
function AddPage($orientation='', $size='', $setHeaderFooter=true)
{
// Start a new page
if($this->state==0)
$this->Open();
$family = $this->FontFamily;
$style = $this->FontStyle.($this->underline ? 'U' : '');
$fontsize = $this->FontSizePt;
$lw = $this->LineWidth;
$dc = $this->DrawColor;
$fc = $this->FillColor;
$tc = $this->TextColor;
$cf = $this->ColorFlag;
if($this->page>0)
{
// Page footer
if ($setHeaderFooter == true)
{
$this->InFooter = true;
$this->Footer();
$this->InFooter = false;
// Close page
$this->_endpage();
}
}
// Start new page
$this->_beginpage($orientation,$size,$setHeaderFooter);
// Set line cap style to square
$this->_out('2 J');
// Set line width
$this->LineWidth = $lw;
$this->_out(sprintf('%.2F w',$lw*$this->k));
// Set font
if($family)
$this->SetFont($family,$style,$fontsize);
// Set colors
$this->DrawColor = $dc;
if($dc!='0 G')
$this->_out($dc);
$this->FillColor = $fc;
if($fc!='0 g')
$this->_out($fc);
$this->TextColor = $tc;
$this->ColorFlag = $cf;
// Page header
if ($setHeaderFooter == true)
{
$this->InHeader = true;
$this->Header();
$this->InHeader = false;
}
// Restore line width
if($this->LineWidth!=$lw)
{
$this->LineWidth = $lw;
$this->_out(sprintf('%.2F w',$lw*$this->k));
}
// Restore font
if($family)
$this->SetFont($family,$style,$fontsize);
// Restore colors
if($this->DrawColor!=$dc)
{
$this->DrawColor = $dc;
$this->_out($dc);
}
if($this->FillColor!=$fc)
{
$this->FillColor = $fc;
$this->_out($fc);
}
$this->TextColor = $tc;
$this->ColorFlag = $cf;
}
Below is a code snippet of my PHP script which uses FPDF
/** PHP FPDF */
require_once 'classes/FPDF/fpdf.php';
require_once 'classes/FPDI/fpdi.php';
class PDF extends FPDI
{
function Header()
{
$this->SetFont( 'Arial', 'B', 18 ); //set font to Arial, Bold, and 16 Size
//create heading with params
//0 - 100% width
//9 height
//"Page Heading" - With this text
//1 - border around it, and center aligned
//1 - Move pionter to new line after writing this heading
//'C' - center aligned
$this->Cell( 0, 9, 'Page Heading', 1, 1, 'C' );
$this->ln( 5 );
}
function Footer()
{
//move pionter at the bottom of the page
$this->SetY( -15 );
//set font to Arial, Bold, size 10
$this->SetFont( 'Arial', 'B', 10 );
//set font color to blue
$this->SetTextColor( 52, 98, 185 );
$this->Cell( 0, 10, 'Footer Text', 0, 0, 'L' );
//set font color to gray
$this->SetTextColor( 150, 150, 150 );
//write Page No
$this->Cell( 0, 10, 'Page No: ' . $this->PageNo(), 0, 0, 'R' );
}
}
// Create new PDF object
$pdf = new PDF('P','mm','A4');
$pdf->addPage('','',false);
// Output pdf file
$pdf->Output('test.pdf','D');
Your help is greatly appreciated!!
I have solved this issue by setting a flag outside the class and use this flag in the header and footer function
The fix is in the page section, not in the addPage function
Just before doing an $pdf->addPage You set the flag as addPage automatically calls the header and footer function.
Here's the correct code (snippet of PHP script which uses FPDF)
/** PHP FPDF */
require_once 'classes/FPDF/fpdf.php';
require_once 'classes/FPDI/fpdi.php';
class PDF extends FPDI
{
function Header()
{
if ($this->header == 1)
{
$this->SetFont( 'Arial', 'B', 18 ); //set font to Arial, Bold, and 16 Size
//create heading with params
//0 - 100% width
//9 height
//"Page Heading" - With this text
//1 - border around it, and center aligned
//1 - Move pionter to new line after writing this heading
//'C' - center aligned
$this->Cell( 0, 9, 'Page Heading', 1, 1, 'C' );
$this->ln( 5 );
}
}
function Footer()
{
if ($this->footer == 1)
{
//move pionter at the bottom of the page
$this->SetY( -15 );
//set font to Arial, Bold, size 10
$this->SetFont( 'Arial', 'B', 10 );
//set font color to blue
$this->SetTextColor( 52, 98, 185 );
$this->Cell( 0, 10, 'Footer Text', 0, 0, 'L' );
//set font color to gray
$this->SetTextColor( 150, 150, 150 );
//write Page No
$this->Cell( 0, 10, 'Page No: ' . $this->PageNo(), 0, 0, 'R' );
}
}
}
// Create new PDF object
$pdf = new PDF('P','mm','A4');
$pdf->header = 0;
$pdf->footer = 0;
$pdf->addPage('','',false);
// Output pdf file
$pdf->Output('test.pdf','D');
I know you found out the awnser already for yourself, but as one of the commenters pointed out this didn't work for me with the footer.
The good news is you can do without setting the external flags. You can use $this->PageNo() to determine whether to include the header and footer or not.
For instance if you'd want to exclude the header and footer on the first page, like I did:
function Footer() {
if($this->PageNo() != 1){
// footer code
}
}
If you'd want to let's say exclude them on several pages and not write an endless if statement you should just put the page numbers to exclude in an array and check with in_array() whether the header and/or footer should be included.
You can define multiple different types of headers and footers by calling functions outside the class:
class PDF extends FPDF {
function Header(){
if(!empty($this->enableheader))
call_user_func($this->enableheader,$this);
}
function Footer(){
if(!empty($this->enablefooter))
call_user_func($this->enablefooter,$this);
}
}
$pdf = new PDF('P');
$pdf->SetTextColor(0);
$pdf->SetFont('Arial','B',10);
$pdf->AliasNbPages();
$pdf->AddPage();
$pdf->Cell(50,6,'Headerless & Footerless page');
$pdf->enableheader = 'header1';
$pdf->AddPage();
$pdf->enablefooter = 'footer1';
$pdf->AddPage();
$pdf->AddPage();
$pdf->enableheader = 'header2';
$pdf->AddPage();
$pdf->enablefooter = 'footer2';
$pdf->Output();
function header1($pdf){
$pdf->Cell(50,6,'Header type 1',1,0,'L');
}
function footer1($pdf){
$pdf->SetY(280);
$pdf->Cell(50,6,'Footer type 1',1,0,'L');
$pdf->Cell(0,6,"Page: {$pdf->PageNo()} of {nb}",1,0,'R');
}
function header2($pdf){
$pdf->Cell(50,6,'Header type 2',1,0,'L');
}
function footer2($pdf){
$pdf->SetY(280);
$pdf->Cell(50,6,'Footer type 2',1,0,'L');
$pdf->Cell(0,6,"Page: {$pdf->PageNo()} of {nb}",1,0,'R');
}
The trick to footers is that the footer is added when the next page is created, with the last footer being added when the output is closed.
Therefore, you have to define the header before the page is added, and the footer afterwards but before the next page.
Is there a way to have a different header logo for the 1st page in a document and different for the 2nd page?
I thought that changing the header data between adding pages might do the trick, but in my tests it seems that setting the header after adding the first page has no effect:
/* 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);
The above produces a document with 2 pages, both having logo_1.png in header.
Will I need to customize TCPDF itself? Has anyone done this? I'm using version 5.9.144.
Strange. I'm having the same issue, but this worked in my older version of TCPDF version:4.8.009 and I noticed the issue when I upgraded to 5.9.149.
I compared the 2 and isolated the issue to the Header() function.
I could force it to allow me to change the header and accept it by running this:
$pdf->setHeaderTemplateAutoreset(true);
The following worked for me,
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
}
}
}
I used:
$pdf->resetHeaderTemplate();
It should override the template header and assign the new one according to need. It worked for me.
How about... have TCPDF generate pages with different headers as separate documents, and then use something to merge all those intermediate PDFs together to form the final document's pages (maybe even TCPDF itself can merge, I don't know)?
A couple of "how to merge?" results:
Merge PDF files with PHP
Merge files into a single PDF using PHP/linux
If you wish to have a cover page without header and footer and internal pages with them, there is an easier way to handle it.
Simply turn off the header and footer print via 'setPrintHeader' and 'setPrintFooter' as follows:
$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");
Enjoy!
Just for the record, if someone has the same problem in the future and can use 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);
I found this to be the solution with the lightest touch:
class MYPDF extends TCPDF {
//Page header
public function AddNewHeader($newTitle) {
$this->header_xobj_autoreset = true;
$this->header_title = $newTitle;
}
}
Be sure to call TCPDF::setHeaderData() first. Next, call this function before every AddPage() event, or, if you're looping through data and relying on tcpdf to add pages, call it after every element add. It breaks the caching of the header, but allows the user to put a new and custom header on each page. All the elements returned by TCPDF::getHeaderData() can be updated in this way.
my solution, with just a condition
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);
}
}