0

I want to merge several pdf files. How can I do that ?

What I have so far is this.

I'm trying to use this package myokyawhtun/PDFMerger.

    include base_path('vendor/myokyawhtun/pdfmerger/PDFMerger.php');

    $pdf = new \PDFMerger;

    $pdf->addPDF(public_path('doc/uploads/doc_1.pdf'), 'all');
    $pdf->addPDF(public_path('doc/uploads/doc_2.pdf'), 'all');

    $pdf->merge('file', public_path('doc/files/test.pdf'));

The errors are different depending on what files I try to merge.

  • If I try to merge the same pdf twice, the file is generated but all blank.
  • If I try with the code above, I get HTTP ERROR 500.
  • If I try with more files, I get tcpdi_parser - Out of memory error.

Bottom line is that it doesn't seem to work.

I already tried several other packages that use FPDI. Problem is that it only works with pdf versions equal or lower to 1.4 (if I'm not mistaken). So using any of those doesn't seem to be an option.

I'm well aware that the question has already been asked, none of the solution seems to work.

Ruben
  • 452
  • 5
  • 14
  • What is the error detail or trace list when you get HTTP 500 error? – Volkan Metin Apr 05 '17 at 10:17
  • It doesn't seem to be any =/. I looked on my nginx error.log, nothing that refers to that. Just an error code from chrome. I'm gonna try to look somewhere else to see if an error is logged somewhere. – Ruben Apr 05 '17 at 10:25
  • Basically - "Allowed memory size of 536870912 bytes exhausted" – Ruben Apr 05 '17 at 10:30

1 Answers1

0

you could try to call an external tool with exec

exec("convert -density 300x300 -quality 100 " 
    . public_path('doc/uploads/doc_1.pdf') . " "
    . public_path('doc/uploads/doc_2.pdf') . " "
    . public_path('doc/uploads/merged.pdf')

see other possible tools than convert: here

Warning: keep in mind that calling exec is not a good idea in general, you should try to avoid it due to potential security leaks. Be absolutely safe, that the public_path function cannot inject malicious commands from user input!

Community
  • 1
  • 1
D3nnisH
  • 31
  • 2
  • 2
  • Public_path is not available to users so it should be find. I tweaked your answer a bit. I installed 'poppler-utils' (sudo apt-get install poppler-utils) and replace your first line by 'exec("pdfunite "'. Works really well and good performance. – Ruben Apr 05 '17 at 10:41