OpenXE/classes/Components/Pdf/Merger/AbstractPdfMerger.php
2021-05-21 08:49:41 +02:00

75 lines
2.2 KiB
PHP

<?php
namespace Xentral\Components\Pdf\Merger;
use Xentral\Components\Pdf\Exception\FileExistsException;
use Xentral\Components\Pdf\Exception\FileNotFoundException;
use Xentral\Components\Pdf\Exception\FileNotWritableException;
use Xentral\Components\Pdf\Exception\InvalidArgumentException;
use Xentral\Components\Pdf\Exception\PdfComponentExceptionInterface;
abstract class AbstractPdfMerger
{
/**
* @param array|string[] $sourceFiles
* @param string $targetFile
*
* @throws PdfComponentExceptionInterface
*
* @return void
*/
abstract public function mergeFiles(array $sourceFiles, $targetFile);
/**
* @param array|string[] $sourceFiles
* @param string $targetFile
*
* @throws InvalidArgumentException
* @throws FileExistsException
* @throws FileNotWritableException
* @throws FileNotFoundException
*
* @return void
*/
protected function preCheckMergeFiles(array $sourceFiles, $targetFile)
{
if (empty($sourceFiles)) {
throw new InvalidArgumentException('Can not merge PDFs. Required parameter "sourceFiles" is empty.');
}
if (empty($targetFile)) {
throw new InvalidArgumentException('Can not merge PDFs. Required parameter "$targetFile" is empty.');
}
if (is_file($targetFile)) {
throw new FileExistsException(sprintf(
'Can not merge PDFs. Target file "%s" already exists.', $targetFile
));
}
if (!$this->isFilePathWriteable($targetFile)) {
throw new FileNotWritableException(sprintf(
'Can not merge PDFs. Unable to create target file "%s" .', $targetFile
));
}
foreach ($sourceFiles as $sourceFile) {
if (!is_file($sourceFile)) {
throw new FileNotFoundException(sprintf(
'Can not merge PDFs. Source file "%s" does not exist.', $sourceFile
));
}
}
}
/**
* @param string $filePath
*
* @return bool
*/
protected function isFilePathWriteable($filePath)
{
$result = @fopen($filePath, 'wb');
@unlink($filePath);
return $result !== false;
}
}