2011-04-26 124 views
1

我首先使用fpdi導入pdf來創建一個fpdf對象,然後對該pdf執行一些更改。我克隆它來創建一個自定義PDF只是添加一些文本。然後我輸出這兩個文件到硬盤只是一個創建和我得到的第二輸出一個致命的錯誤:使用FPDI和FDP生成略有不同的pdf文件

致命錯誤:在調用C未定義的方法stdClass的:: closeFile():\ Program Files文件\的EasyPHP 3.0 \ WWW \ oursin \ oursin \ PUBLIC \腳本\ FPDI \ fpdi.php上線

件我的代碼:

$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

克隆一個對象不能保證產生兩個完全獨立的對象。他們很可能仍然使用相同的FPDI。所以當你修改一個,你實際上修改兩個,關閉一個也關閉。 – 2011-04-26 05:32:03

+0

我認爲在這種情況下,對象是不同的,因爲當我在fpdi.php啓動closeFile方法中評論ligne 534時,會生成兩個pdf文件,它們是不同的,並且像我想要的那樣定製。但第二個出現錯誤(未找到xobject)。我認爲我應該防止在兩個輸出之間發生一個動作,或者可能之前,但我沒有找到一個。謝謝answay您的評論 – Aureltime 2011-04-26 07:11:38

+0

@MarcB事實並非如此。在克隆FPDI時,將文本保存到一個而不是另一個。問題來自輸出它們。 – 2015-05-14 13:45:01

回答

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是將生成和處理文檔的文件的名稱。在這種情況下,我希望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'); 

我得到了兩個文件作爲輸出,「父母」和「孩子」之間的獨特修改全部到位。