mirror of
https://github.com/OpenXE-org/OpenXE.git
synced 2024-11-15 12:37:14 +01:00
75 lines
2.2 KiB
PHP
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;
|
||
|
}
|
||
|
}
|