2014-10-16 11 views
6

Inizierò dicendo che posso generare PDF con mPDF, ma per la vita di me, non riesco a farlo unire un PDF esistente con il PDF appena generato.PHP - Come usare mPDF per unire PDF

Quello che devo capire è come aggiungere/aggiungere il PDF esistente al PDF appena generato. Ho provato con i metodi mPDF per l'importazione pagine, ma tutto quello che posso ottenere è un errore del tipo:

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

Il messaggio di cui sopra è ambiguo e poco chiaro sul motivo per cui non è possibile aprire il file ... Ecco il codice che sto usando per cercare di unire i file 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 sarà il nome del file indicato per l'utente. $ url è l'HTML che stiamo scrivendo nel file durante la generazione di PDF. $ technical_drawing è un percorso relativo a un PDF che vogliamo aggiungere/unire al PDF generato.

Capisco che potrei usare qualcosa come ghostscript, ma non ho quel tipo di accesso sul server del client.

Fatemi sapere se qualcuno ha trovato una soluzione a questo utilizzando mPDF o se io sono S.O.L. e ha bisogno di trovare un'altra libreria per unire i PDF. Sono davvero alla ricerca di soluzioni o suggerimenti, ma non solo collegamenti a un'altra libreria. Ho esaurito ciò che posso trovare su Google o nella documentazione di mPDF che descrive l'errore che sto riscontrando.

MODIFICA: modificato l'errore mPDF da http://example.com/pdf/example.pdf a "/downloads/test.pdf".

EDIT_2: il codice è stato corretto per il percorso relativo.

Ecco il codice di lavoro finale. Bonus se qualcuno sa come specificare l'ordine di scrittura del documento HTML in PDF, importando la pagina come ultima pagina (con dimensioni di pagina personalizzate diverse da quella dell'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

in cui l'URL http ' : // example.com/pdf/example.pdf' viene fornito? – zerkms

+0

si dovrebbe dare il percorso del file locale non url –

+0

@zerkms - Ci dispiace, per chiarire, non è example.com. Il mio url è impostato su un percorso locale come "/downloads/test.pdf". – cvanorman

risposta

3

mi Unire file PDF come questo - {tutte le pagine in tutti i file}:

$ = questa classe che estende la classe 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

Questo mi dà un pdf vuoto, non è necessario aggiungere il modello come una pagina? –

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

Spiega come il tuo codice risolve gli utenti –