diff --git a/src/Pdf.php b/src/Pdf.php index 087feb8..c178604 100644 --- a/src/Pdf.php +++ b/src/Pdf.php @@ -115,6 +115,14 @@ public function getPages() return $this->pages; } + private function checkFolderIfExists($target) + { + $folder = dirname($target); + if (!empty($folder) && $folder !== '.' && !file_exists($folder)) { + mkdir($folder); + } + } + /** * Merge all added pages in the object into a single output file. * @@ -124,6 +132,11 @@ public function getPages() */ public function merge($target) { + if (empty($target)) { + return false; + } + $this->checkFolderIfExists($target); + $cmd = $this->getCommand(); $cmd->addArg('--empty', null, false); $cmd->addArg('--pages', $this->pages); @@ -148,6 +161,11 @@ public function split($target, $pagesPerGroup=1) throw new \Exception("Error! Currently unable to split when more than one PDF file is specified."); } + if (empty($target)) { + return false; + } + $this->checkFolderIfExists($target); + $cmd = $this->getCommand(); $cmd->addArg('--split-pages=', $pagesPerGroup, false); $cmd->addArg('', $this->pages, false); @@ -180,6 +198,11 @@ public function rotate($target, $direction='+90', $pageString=null) throw new \Exception("Error! Currently unable to rotate when more than one PDF file is specified."); } + if (empty($target)) { + return false; + } + $this->checkFolderIfExists($target); + $cmd = $this->getCommand(); $cmd->addArg('--rotate=', $rotationCmd, false); $cmd->addArg('', $this->pages, false); diff --git a/tests/PdfTest.php b/tests/PdfTest.php index d000126..b76ccce 100644 --- a/tests/PdfTest.php +++ b/tests/PdfTest.php @@ -7,10 +7,20 @@ class PdfTest extends TestCase { + private function getCmdLocation() + { + if (getenv('GITHUB_ACTIONS') || PHP_OS === 'Linux') { + // Use location binary to run against + return __DIR__ . '/bin/qpdf'; + } else { + // Default: we expect it installed (and in PATH) + return 'qpdf'; + } + } public function testGetVersion() { - $pdf = new Pdf(); + $pdf = new Pdf(null, ['command' => $this->getCmdLocation()]); $version = $pdf->getVersion(); // Test it works @@ -22,34 +32,45 @@ public function testGetVersion() public function testMerge() { - $pdf = new Pdf(); + $pdf = new Pdf(null, ['command' => $this->getCmdLocation()]); + $pdf->addPage(__DIR__ . "/files/TestPdf.pdf"); $pdf->addPage(__DIR__ . "/files/TestPdf2.pdf"); - $pdf->merge(__DIR__ . "/output/test-merge.pdf"); + + $result = $pdf->merge(__DIR__ . "/output/test-merge.pdf"); + $this->assertTrue($result); $this->assertEmpty($pdf->getError()); } public function testSplit() { - $pdf = new Pdf(); + $pdf = new Pdf(null, ['command' => $this->getCmdLocation()]); + $pdf->addPage(__DIR__ . "/files/TestPdfTwoPage.pdf"); - $pdf->split(__DIR__."/output/test-split.pdf"); + + $result = $pdf->split(__DIR__."/output/test-split.pdf"); + $this->assertTrue($result); $this->assertEmpty($pdf->getError()); } public function testRotate() { - $pdf = new Pdf(); + $pdf = new Pdf(null, ['command' => $this->getCmdLocation()]); + $pdf->addPage(__DIR__ . "/files/TestPdfTwoPage.pdf"); - $pdf->rotate(__DIR__ . "/output/rotated.pdf", "+90", "1"); + + $result = $pdf->rotate(__DIR__ . "/output/rotated.pdf", "+90", "1"); + $this->assertTrue($result); $this->assertEmpty($pdf->getError()); } public function testGetPageCount() { - $pdf = new Pdf(); + $pdf = new Pdf(null, ['command' => $this->getCmdLocation()]); + $pdf->addPage(__DIR__ . "/files/TestPdfTwoPage.pdf"); $pdf->addPage(__DIR__ . "/files/TestPdf.pdf"); + $count = $pdf->getPageCount(); $this->assertEmpty($pdf->getError()); $this->assertEquals(3, $count); @@ -57,7 +78,7 @@ public function testGetPageCount() public function testEnsureErrorWithMultiFileRotate() { - $pdf = new Pdf(); + $pdf = new Pdf(null, ['command' => $this->getCmdLocation()]); $pdf->addPage(__DIR__ . "/files/TestPdfTwoPage.pdf"); $pdf->addPage(__DIR__ . "/files/TestPdf.pdf"); $this->expectExceptionMessage('Error! Currently unable to rotate when more than one PDF file is specified.'); diff --git a/tests/bin/qpdf b/tests/bin/qpdf new file mode 100755 index 0000000..1410c6d Binary files /dev/null and b/tests/bin/qpdf differ