Search code examples
phppdfmpdf

Merge two PDF files into single one using MPDF


I am using MPDF library to generate pdf files .I have created two PDF files in my root directory as follows :

$invoice_nos = ['0'=>'ISE-00000014Y18','1'=>'ISE-00000005Y18'];
foreach ($invoice_nos as $key => $invoice_no) {
    $html = 'Invoice No - '.$invoice_no;
    $pdf_file_name = $invoice_no.'.pdf';
    $pdf_file_path = ROOT . '/app/webroot/Service_Invoices/'. DS .$pdf_file_name ;
    ob_start();
    $mpdf = new \mPDF('utf-8', 'A4' ,'','',5,5,36,10,5,4);
    $mpdf->WriteHTML($html,2);
    ob_clean();
    $mpdf->Output($pdf_file_name,'f');
}

Now I want to merge these two files into a single file with different pages. How can I do this? I have searched many examples of it but nothing is working.


Solution

  • mPDF is not the best tool to merge PDF files. You'll be better off with GhostScript:

    gs -dBATCH -dSAFER -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=combined.pdf invoice1.pdf invoice2.pdf
    

    Note: Ghostscript requires a hefty $25,000 annual license for commercial use, or with its AGPL license, you must release your code as open source. Source


    Alternatively, generate both invoices directly to one file:

    $invoice_nos = ['0' => 'ISE-00000014Y18', '1' => 'ISE-00000005Y18'];
    $mpdf = new \mPDF('utf-8', 'A4', '', '', 5, 5, 36, 10, 5, 4);
    
    foreach ($invoice_nos as $key => $invoice_no) {
        $html = 'Invoice No - ' . $invoice_no;
        $mpdf->WriteHTML($html, 2);
        $mpdf->WriteHTML('<pagebreak>');
    }
    
    $pdf_file_name = $invoice_no . 'invoices.pdf';
    $mpdf->Output($pdf_file_name, 'f');