Использование FPDI и FDP для генерации немного разных файлов PDF - PullRequest
1 голос
/ 26 апреля 2011

Сначала я импортирую pdf, используя fpdi, чтобы создать объект fpdf, а затем внесу несколько изменений в этот pdf. Я клонирую его, чтобы сделать собственный PDF, просто добавив несколько текстов Затем я выводил два файла на диск, но был создан только один, и я получил фатальную ошибку для второго вывода:

Неустранимая ошибка : вызов неопределенного метода stdClass :: closeFile () в C: \ Program Files \ EasyPHP 3.0 \ www \ oursin \ oursin \ public \ scripts \ FPDI \ fpdi.php on line 534

частей моего кода:

$pdf = new FPDI('L','mm',array(291.6,456)); 
$fichier=$repertoireGrilles.'GR_IFR.pdf';   

$pdf->setSourceFile($fichier); 
// add a page 
$tplIdx = $pdf->importPage(1); 
$pdf->AddPage(); 
$pdf->useTemplate($tplIdx,0,0,0); 
.. 
... 
methods on $pdf 
.. 
.. 
.. 

$pdfCopie=clone $pdf; 

methods on $pdfCopie

$pdfCopie-> Output($repertoireGrilles.'grillesQuotidiennes/'.$date.'/Grille_'.$date.'_'.$ou.'_copie.pdf','F'); 
$pdf-> Output($repertoireGrilles.'grillesQuotidiennes/'.$date.'/Grille_'.$date.'_'.$ou.'.pdf','F'); 

Кто-нибудь поможет мне решить эту проблему, которая держит мой мозг под высоким давлением в течение нескольких часов (дней) :)?

1 Ответ

1 голос
/ 14 мая 2015

Клонирование, разветвление, копирование, все это действительно грязно. Если вы выберете этот маршрут, вам будет очень трудно получить результаты. Вместо этого рассмотрим этот подход:

  1. Выполните несколько вызовов AJAX для одного файла PHP, передайте ему значение pid, чтобы различать их.
  2. Пройдите точно такую ​​же настройку документа для FPDI. Это гораздо более согласованно, чем клонирование, разветвление, копирование и т. Д.
  3. Установите флажок pid и выполните различные действия с разными документами после завершения настройки.
  4. Вывод документов.

Вот мой JQuery:

$(document).ready(function(){
    var i;
    for( i=0; i<=1; i++ )
    {
        $.ajax({
            url:    'pdfpid.php',
            data:   {
                pid:    i,
                pdf:    'document.pdf'
            },
            type:   'post'
        });
    }
});

Как видите, все довольно просто. pdfpid.php - это имя файла, который будет генерировать и обрабатывать документы. В этом случае я хочу, чтобы документ с pid, равным 0, был моим «оригиналом», а документ с pid, равным 1, - «клонированным» документом.

//  Ensure that POST came in correctly
if( !array_key_exists('pid',$_POST) || !array_key_exists('pdf',$_POST) )
    exit();

//  Populate necessary variables from $_POST
$pid    = intval($_POST['pid']);
$src    = $_POST['pdf'];

//  Setup the PDF document
$pdf = new FPDI();
$pdf->setSourceFile($src);
$templateID = $pdf->importPage(1);
$pdf->addPage();
$pdf->useTemplate($templateID);
$pdf->SetFont('Arial','B',24);

switch( $pid )
{
    default:
        break;
    case 0:
        //  "Parent" document
        $pdf->Text(10,10,"ORIGINAL");
        $filename = "original.pdf";
        break;
    case 1:
        //  "Child" document
        $pdf->Text(10,10,"CLONED");
        $filename = "cloned.pdf";
        break;
}

$pdf->Output($filename,'F');

Я получил оба документа в качестве вывода, с уникальными изменениями между «родителем» и «потомком».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...