2014-10-16 161 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