Eai, bão demais? 🤙🏽
Esse é meu primeiro post, espero fazer isso com mais frequência, primeiro porque eu gosto de escrever e ainda mais que isso gosto de me sentir útil para outras pessoas, e espero que o conteúdo desse post lhe ajude, então borá lá.
Esse final de semana eu precisei lidar com o agrupamento de pdfs em um projeto laravel, resolvi documentar porque creio que poderá ser útil não só para outras pessoas mas para mim mesmo.
Como a task foi em um projeto legado, a lib que eu usei só é compatível com o PHP 5 ao 7 🥲 (Mas acompanha o exemplo porque a lógica é similar com as libs com essa finalidade).
⊕ Instalando a dependência ⊕
A lib que usarei é a PDFMerger, para instalar no seu projeto você precisará usar o comando:
composer require clegginabox/pdf-merger:dev-master
Show me the code 👨🏽💻
Primeiro irei mostrar o exemplo completo e após irei detalhar como eu o usei:
public function groupPdf(array $params): void
{
$storage = \Storage::disk(storageDefineDisk());
$basePath = "main-folder/";
$pdfMerger = app(\Clegginabox\PDFMerger\PDFMerger::class);
if (! $storage->exists($basePath)) {
$storage->makeDirectory($basePath);
}
foreach ($params as $param) {
$pdfName = 'name-' . uniqid() . '.pdf';
$file = $basePath . $pdfName;
$storage->put($file, $param['pdf']);
$pdfMerger->addPDF($storage->path($file));
$deleteFile[] = $file;
}
$fileMescled = "mescled-pdf-" . now() . '-' . uniqid() . '.pdf';
$fullPath = $basePath . $fileMescled;
$pdfMerger->merge('file', $storage->path($fullPath));
$storage->delete($deleteFile);
}
Bom então vamos passo a passo:
- Logo de cara já podem observar que estou passando para o meu storage um helper, esse helper basicamente vai definir qual será o seu disk baseado no seu ambiente, se estiver em produção irá selecionar o disk que é usado em produção e caso contrário é selecionado o local.
- Depois definimos em uma variável a pasta principal onde será salvo todos os pdfs criados (tanto os que sofrerão o merge e o arquivo resultante).
- Agora precisamos instanciar a nossa lib, a mesma é instanciada com o app para a resolução das dependências.
- Verifico se a pasta principal existe, caso contrário eu a crio (eu sou bem chato com if's, eu colocaria isso em uma outra função, mas tudo bem, é só um exemplo).
- Logo após eu inicio o foreach com os pdf's recebidos pela função.
Dentro do foreach:
- Já dento do foreach o primeiro passo é criar o nome do arquivo pdf.
- Depois criamos uma variável onde concatenaremos o nome do arquivo base com o nome do pdf que criaremos.
- Agora chamaremos o storage e salvaremos o pdf no caminho definido.
- Finalmente chamaremos a lib, utilizando a função add pdf, passando para ela o path do pdf criado.
- Por fim colocamos o path completo do arquivo criado dentro de um array para excluirmos ele posteriormente.
Finalmente o merge:
Por fim, a $fileMescled é a variável que conterá o nome do arquivo pdf que irá ser criado, depois concatenamos com o basepath. E finalmente chamaremos a função MERGE da lib que fará o merge dos pdfs, para essa função primeiro passamos o primeiro parâmetro (output method) como file e o segundo argumento o caminho completo que o nosso arquivo resultante do merge deve ser salvo.
E na última linha apagamos todos os pdf's criados no foreach que foram "merjados".
Conclusão:
Uma coisa é certeza, uma hora ou outra em sua carreira você vai se deparar com um rolê desse. Espero que tenha sido útil, não hesite em perguntar caso tenha alguma dúvida, tmj e até a próxima!
Top comments (0)