Привет, я использую 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);
?>
Страница, которую это строит, работает с этой формы:
FPDF «кэширует» информацию о шрифте, которая используется в данный момент. Когда вы переходите на другую страницу, FPDF «думает», что шрифт уже определен / установлен, но в самом файле PDF это не так. Вы должны установить свой шрифт и размер в цикле импорта, чтобы шрифт был доступен на всех страницах (я думаю, что он также может работать, определяя его только на первой).
В любом случае вы должны были заметить, что переход между написанными страницами приводит к проблемам, и вы должны создать логику, которая создает файл сверху вниз без использования таких вещей, как SetPage ().
Других решений пока нет …