1

我首先使用 fpdi 导入一个 pdf 来制作一个 fpdf 对象,然后我对该 pdf 执行一些更改。我克隆它以制作自定义 pdf,只需添加一些文本。然后我将这两个文件输出到磁盘,但只创建了一个,第二个输出出现致命错误:

致命错误:在第534调用 C:\Program Files\EasyPHP 3.0\www\oursin\oursin\public\scripts\FPDI\fpdi.php中未定义的方法 stdClass::closeFile()

我的代码片段:

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

任何人都可以帮助我解决这个让我的大脑在数小时(数天)内处于高压状态的问题:) 吗?

4

1 回答 1

1

克隆、分叉、复制,任何这些都是非常肮脏的。如果你走这条路,你将很难处理输出。相反,请考虑这种方法:

  1. 对单个 PHP 文件进行多次 AJAX 调用,将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是将生成和处理文档的文件的名称。在这种情况下,我希望 apid为 0 的文档是我的“原始”文档,而 apid为 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');

我将两个文档都作为输出,其中“父”和“子”之间的独特修改全部到位。

于 2015-05-14T15:39:43.233 回答