Add merge

This commit is contained in:
Philipp Lang 2023-11-29 23:01:01 +01:00
parent 8654d13e81
commit 18650ba7ad
1 changed files with 34 additions and 1 deletions

View File

@ -10,7 +10,14 @@ use Log;
abstract class BaseCompiler implements Responsable abstract class BaseCompiler implements Responsable
{ {
protected File $file; public function __construct(protected ?File $file = null)
{
}
public static function fromFile(string $file): static
{
return new static(new File($file, false));
}
public function compile(Document $document): self public function compile(Document $document): self
{ {
@ -41,6 +48,32 @@ abstract class BaseCompiler implements Responsable
return $this; return $this;
} }
/**
* @param array<int, Documents> $documents
*/
public function merge(array $documents): self
{
$outfile = '/tmp/' . Str::uuid()->toString() . '.pdf';
$paths = array_map(fn ($document) => static::compile($document)->getPath(), $documents);
$command = collect([
'pdfjam --nup 1x1 --outfile ' . $outfile,
...array_map(fn ($path) => escapeshellarg($path), $paths),
])->implode(' ');
exec($command, $output, $returnVar);
foreach ($paths as $path) {
@unlink($path);
}
if (0 !== $returnVar) {
Log::error('Merging failed', ['output' => $output]);
throw (new CompilerException('Compilation failed.'))->setOutput($output);
}
return static::fromFile($outfile);
}
public function storeAs(string $directory, string $name, string $disk): string public function storeAs(string $directory, string $name, string $disk): string
{ {
$contents = $this->file->getContent(); $contents = $this->file->getContent();