FPDF не пишет на всех страницах

Привет, я использую FPDF и FPDI, я использую FPDI для объединения нескольких PDF-файлов, а затем использую FPDF для заполнения информации на основе заполненной формы, я установил метод SetPage в FPDF, чтобы иметь возможность установить страницу, над которой я работаю, я могу полностью записать первый файл (первые 3 страницы). Однако, когда я пытаюсь записать второй файл (4-я и последующие страницы), я использую SetXY и Write, но ничего не записывается, я могу добавить изображение (штрих-код внизу страницы), но без текста. , есть идеи относительно того, что я делаю неправильно?

Это код, который мне нужен для объединения файлов:

<?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();
?>    

Это код для заполнения первого PDF-файла (который отлично работает):

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


?>

Это то, что я использую, чтобы попытаться написать второй PDF-файл, я попытался объединить NDA.php и Distro.php в один файл, и это не имеет значения.

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

Страница, которую это строит, работает на этой форме:

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


person Matt T    schedule 07.02.2015    source источник


Ответы (1)


FPDF «кэширует» информацию о шрифтах, которые используются в данный момент. Когда вы возвращаетесь на другую страницу, FPDF «думает», что шрифт уже определен / установлен, но в самом PDF-файле это не так. Вы должны установить свой шрифт и размер в своем цикле импорта, чтобы гарантировать, что шрифт доступен на всех страницах (я думаю, что это также может сработать, если определить его только на первой).

Как бы то ни было, вы должны были видеть, что переход между написанными страницами приводит к проблемам, и вам следует создать логику, которая создает файл сверху вниз, вообще не используя такие вещи, как «SetPage ()».

person Jan Slabon    schedule 08.02.2015