使用FPDI和FDP生成略有不同的pdf文件

时间:2011-04-26 05:18:11

标签: php templates fpdf fpdi

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

致命错误:在 C:\ Program Files \ EasyPHP 3.0 \ www \ oursin \ oursin \ public \ scripts \ FPDI \ fpdi中调用未定义的方法stdClass :: closeFile()。 php 在线 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 个答案:

答案 0 :(得分:1)

克隆,分叉,复制,其中任何一个都很脏。如果采取这种方式,你将很难获得输出。相反,请考虑这种方法:

  1. 对单个PHP文件进行多次AJAX调用,向其传递pid值,以便区分它们。
  2. 完成FPDI的完全相同的文档设置。这比克隆,分叉,复制等更加一致。
  3. 检查pid并在完成所有设置后对不同的文档执行不同的操作。
  4. 输出文件。
  5. 这是我的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');
    

    我将这两个文件作为输出,“父母”和“孩子”之间的独特修改都已到位。