_rewritepages($pages); } $this->_files[] = array($filepath, $pages); } else { throw new \exception("Could not locate PDF on '$filepath'"); } return $this; } public function myMerge($outputmode = 'browser', $outputpath = 'newfile.pdf', $theme = false) { if (!isset($this->_files) || !is_array($this->_files)): throw new \exception("No PDFs to merge."); endif; $fpdi = new \setasign\Fpdi\Fpdi(); $first = 1; // //merger operations foreach ($this->_files as $file) { $filename = $file[0]; $filepages = $file[1]; $count = $fpdi->setSourceFile($filename); //add the pages if ($filepages == 'all') { for ($i = 1; $i <= $count; $i++) { $count = $fpdi->setSourceFile($filename); $template = $fpdi->importPage($i); $size = $fpdi->getTemplateSize($template); $orientation = ($size['height'] > $size['width']) ? 'P' : 'L'; $fpdi->AddPage($orientation, array($size['width'], $size['height'])); if($theme){ $fpdi->setSourceFile(__DIR__ . '/../../public/pdf/'.$theme.'-'.$first.'.pdf'); if($first == 1){ $first = 2; } $backId = $fpdi->importPage(1); $fpdi->useTemplate($backId); } $fpdi->useTemplate($template); } } else { foreach ($filepages as $page) { $count = $fpdi->setSourceFile($filename); if (!$template = $fpdi->importPage($page)): throw new \exception("Could not load page '$page' in PDF '$filename'. Check that the page exists."); endif; $size = $fpdi->getTemplateSize($template); $orientation = ($size['h'] > $size['w']) ? 'P' : 'L'; $fpdi->AddPage($orientation, array($size['w'], $size['h'])); if($theme){ $fpdi->setSourceFile(__DIR__ . '/../../public/pdf/'.$theme.'-'.$first.'.pdf'); if($first == 1){ $first = 2; } $backId = $fpdi->importPage(1); $fpdi->useTemplate($backId); } $fpdi->useTemplate($template); } } //after first file (invoice) on bpaper $slug = false; } //output operations $mode = $this->_switchmode($outputmode); if ($mode == 'S') { return $fpdi->Output($outputpath, 'S'); } else { if ($fpdi->Output($outputpath, $mode) == '') { return true; } else { throw new \exception("Error outputting PDF to '$outputmode'."); return false; } } } /** * FPDI uses single characters for specifying the output location. Change our more descriptive string into proper format. * @param $mode * @return Character */ private function _switchmode($mode) { switch (strtolower($mode)) { case 'download': return 'D'; break; case 'browser': return 'I'; break; case 'file': return 'F'; break; case 'string': return 'S'; break; default: return 'I'; break; } } /** * Takes our provided pages in the form of 1,3,4,16-50 and creates an array of all pages * @param $pages * @return array * @throws exception */ private function _rewritepages($pages) { $pages = str_replace(' ', '', $pages); $part = explode(',', $pages); //parse hyphens foreach ($part as $i) { $ind = explode('-', $i); if (count($ind) == 2) { $x = $ind[0]; //start page $y = $ind[1]; //end page if ($x > $y): throw new \exception("Starting page, '$x' is greater than ending page '$y'."); return false; endif; //add middle pages while ($x <= $y): $newpages[] = (int)$x; $x++; endwhile; } else { $newpages[] = (int)$ind[0]; } } return $newpages; } } /* $pdf = new PDFMerger; $pdf->addPDF('samplepdfs/one.pdf', '1, 3, 4') ->addPDF('samplepdfs/two.pdf', '1-2') ->addPDF('samplepdfs/three.pdf', 'all') ->merge('file', 'samplepdfs/TEST2.pdf'); //REPLACE 'file' WITH 'browser', 'download', 'string', or 'file' for output options //You do not need to give a file path for browser, string, or download - just the name. */