2014-10-16 159 views
6

我會首先說我可以使用mPDF生成PDF文件,但是對於我而言,我無法將其與現有的PDF合併爲PDF文件剛生成。PHP - 如何使用mPDF合併PDF

我需要弄清楚的是如何在新生成的PDF中附加/添加現有PDF。我一直在使用導入頁面MPDF方法試過,但我能得到的是一個錯誤,如:

mPDF error: Cannot open '/downloads/test.pdf'. 

上述消息是含糊不清,爲什麼它不能打開文件... 這裏是我用來嘗試和合並PDF的代碼:

include_once("./pdf/mpdf/mpdf.php"); 

$output_file = $_GET['output_file']; 
$url = $_GET['input_file']; 
$technical_drawing = $_GET['tech_drawing']; 

$html = file_get_contents($url); 

$mpdf = new mPDF('utf-8','Letter','','',0,0,0,0,0,0,'P'); 
$mpdf->SetImportUse(); 

$pagecount = $mpdf->SetSourceFile($technical_drawing); 
$tplIdx = $mpdf->ImportPage($pagecount); 
$mpdf->UseTemplate($tplIdx); 

$mpdf->WriteHTML($html); 
$mpdf->Output($output_file, 'D'); 

exit; 

$ output_file將顯示給用戶的文件名。 $ url是我們在生成PDF時寫入文件的HTML。 $ technical_drawing是我們想要使用生成的PDF添加/合併PDF的相對路徑。

我知道我可以使用類似ghostscript的東西,但我沒有在客戶端的服務器上訪問這種類型的東西。

讓我知道是否有人找到了使用mPDF的解決方案,或者如果我是S.O.L.並需要找到另一個庫來完成PDF合併。我真的在尋找解決方案或建議,但不只是鏈接到另一個圖書館。我已經用盡了我在Google或mPDF的文檔中找到的描述我遇到的錯誤的內容。

編輯:將mPDF錯誤從http://example.com/pdf/example.pdf更改爲'/downloads/test.pdf'。

EDIT_2:已修復代碼以採取相對路徑。

這是最後的工作代碼。如果有人知道如何指定將HTML寫入PDF文檔,將頁面導入爲最後一頁(具有與HTML不同的自定義頁面大小),則可獲得獎勵。

include_once("./pdf/mpdf/mpdf.php"); 

    $output_file = 'test-' . $_GET['output_file']; 
    $url = $_GET['input_file']; 
    $technical_drawing = $_GET['tech_drawing']; 

    $html = file_get_contents($url); 


    if(!file_exists($technical_drawing)) { 
     $mpdf = new mPDF('utf-8','Letter','','',0,0,0,0,0,0,'L'); 
    } else { 
     $mpdf = new mPDF('utf-8','A3-L','','',0,0,0,0,0,0,'L'); 

     $mpdf->SetImportUse(); 

     $pagecount = $mpdf->SetSourceFile($technical_drawing); 
     $import_page = $mpdf->ImportPage(); 

     $mpdf->UseTemplate($import_page); 

     // Add Last page 
     $mpdf->AddPageByArray(array(
     'orientation' => 'P', 
     'ohvalue' => 1, 
     'ehvalue' => -1, 
     'ofvalue' => -1, 
     'efvalue' => -1, 
     'newformat' => 'Letter' 
    )); 
    } 

    $mpdf->WriteHTML($html); 
    $mpdf->Output($output_file, 'D'); 

    exit; 
+0

其中URL'HTTP :// example.com/pdf/example.pdf'來自? – zerkms 2014-10-16 21:38:34

+0

你應該給本地文件路徑沒有url – 2014-10-16 21:38:51

+0

@zerkms - 對不起,澄清,它不是example.com。我的網址被設置爲像「/downloads/test.pdf」這樣的本地路徑。 – cvanorman 2014-10-16 21:49:34

回答

3

我合併PDF文件這樣的 - {所有文件中的所有頁面}:

$此=擴展MPDF類類...

function mergePDFFiles(Array $filenames, $outFile) 
{ 
    if ($filenames) { 

     $filesTotal = sizeof($filenames); 
     $fileNumber = 1; 

     $this->SetImportUse(); 

     if (!file_exists($outFile)) { 
      $handle = fopen($outFile, 'w'); 
      fclose($handle); 
     } 

     foreach ($filenames as $fileName) { 
      if (file_exists($fileName)) { 
       $pagesInFile = $this->SetSourceFile($fileName); 
       for ($i = 1; $i <= $pagesInFile; $i++) { 
        $tplId = $this->ImportPage($i); 
        $this->UseTemplate($tplId); 
        if (($fileNumber < $filesTotal) || ($i != $pagesInFile)) { 
         $this->WriteHTML('<pagebreak />'); 
        } 
       } 
      } 
      $fileNumber++; 
     } 

     $this->Output($outFile); 

    } 

} 
+0

這給了我一個空白的PDF,你不需要添加模板作爲一個頁面? – 2016-12-08 13:03:47

0
function mergePDFFiles(Array $filenames, $outFile) { 
    $mpdf = new mPDF(); 
    if ($filenames) { 
     // print_r($filenames); die; 
     $filesTotal = sizeof($filenames); 
     $fileNumber = 1; 
     $mpdf->SetImportUse(); 
     if (!file_exists($outFile)) { 
      $handle = fopen($outFile, 'w'); 
      fclose($handle); 
     } 
     foreach ($filenames as $fileName) { 
      if (file_exists($fileName)) { 
       $pagesInFile = $mpdf->SetSourceFile($fileName); 
       //print_r($fileName); die; 
       for ($i = 1; $i <= $pagesInFile; $i++) { 
        $tplId = $mpdf->ImportPage($i); 
        $mpdf->UseTemplate($tplId); 
        if (($fileNumber < $filesTotal) || ($i != $pagesInFile)) { 
         $mpdf->WriteHTML('<pagebreak />'); 
        } 
       } 
      } 
      $fileNumber++; 
     } 
     $mpdf->Output($outFile, 'D'); 
    } 
} 
+2

請解釋您的代碼如何解決用戶查詢 – 2016-12-26 11:42:48