1
votes

Hi I'm using FPDF and FPDI, I'm using FPDI to concatenate several PDFs then using FPDF to fill in the information based on a form that is filled out, I've setup a SetPage method within FPDF to be able to set the page on which I'm working on, I'm able to write on the first file completely fine (first 3 pages). However, when I'm trying to write on the second file (4th and continuing pages), I use the SetXY and Write but nothing is written, I am able to add an image (barcode at the bottom of the page) but no text, any ideas as to what I'm doing wrong?

This is the code that I've got to concatenate the files:

<?php
session_start();
require_once('lib/pdf/fpdf.php');
require_once('lib/pdi/fpdi.php');
require_once('lib/barcode/class/BCGFontFile.php');
require_once('lib/barcode/class/BCGColor.php');
require_once('lib/barcode/class/BCGDrawing.php');
require_once('lib/barcode/class/BCGcode39extended.barcode.php');

$contractType = $_SESSION['addition'];

require_once('barcode.php');

 if(isset($contractType))
   {
    $files = array('lib/blank/NDA.pdf');

       if($contractType = 'artist')
       {
           array_push ($files,
               'lib/blank/Distro.pdf',
               'lib/blank/Management-Trial.pdf'
           );
       } else {
           echo "Whoops! Something must've happened when you were filling out your contracts! Please try filling them out again. Sorry!";
       }
   }

$pdf = new FPDI();
   foreach ($files AS $file) {
       $pageCount = $pdf->setSourceFile($file);
       for($n = 1; $n <= $pageCount; $n++) {
           $tmpIdx = $pdf->importPage($n);
           $size = $pdf->getTemplateSize($tmpIdx);
           if($size['w'] > $size['h']) {
               $pdf->AddPage('L', array($size['w'], $size['h']));
           } else {
               $pdf->AddPage('P', array($size['w'], $size['h']));
           }
           $pdf->useTemplate($tmpIdx);
       }
   }
    //NDA FILLER
    include('lib/filler/NDA.php');
    //Distro Contract Filler
    include('lib/filler/Distro.php');

//session_unset();
$pdf->Output();
?>    

This is the code for filling out the first PDF (which works completely fine):

NDA.php

<?php
//ID No.
$idcoded = 'idbars/'.$_SESSION['name'].'.png';
/*
for($p = 2; $p <= $pages; $p++) 
{
    $pdf->Image($idcoded,0,350);
    $pdf->setPage($p);
}
*/

$pdf->SetPage(1);
$pdf->Image($idcoded,0,350);
$pdf->SetFont('Helvetica');
$pdf->SetTextColor(255, 0, 0);
//NDA DATE
$pdf->SetXY(51, 109.5);
$pdf->Write(0, date(d));
$pdf->SetXY(72, 109.5);
$pdf->Write(0, date(F));
//Legal Name
$pdf->SetXY(72, 114.5);
$pdf->Write(0, $_SESSION['name']);
//stage Name
$pdf->SetXY(80, 119.5);
$pdf->Write(0, $_SESSION['sname']);

$pdf->setPage(2);
$pdf->Image($idcoded,0,350);
$pdf->setPage(3);
$pdf->Image($idcoded,0,350);
$signature = 'idbars/'.$_SESSION['name'].'_sig.png';
$pdf->Image($signature,20,105,100);


?>

This is what I'm using to try to write on the second PDF, I've tried combining the NDA.php and Distro.php into one file and that makes no difference

Distro.php

<?php

$pdf->SetPage(4);
$pdf->SetXY(10,10);
$pdf->Cell(0, $_SESSION['name']);
$pdf->Write(0, $_SESSION['name']);
$pdf->Image($idcoded,0,350);
?>

The page that this is building works off of this form:

https://secure.gr8label.com/sign/artist/Dev%20Test/

1

1 Answers

0
votes

FPDF "caches" the font information that is currently used. As you jump back to another page FPDF "thinks" that the font is already defined/set but in the PDF file itself it isn't. You should set your font and size in your import loop, to ensure that the font is available on all pages (I think it also could work, by defining it only on the first one).

Anyhow you should have seen that jumping between written pages results in problems and you should create a logic which creates the file from top to bottom without using things like "SetPage()" at all.