<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: João Pedro Gomes de Sena</title>
    <description>The latest articles on Forem by João Pedro Gomes de Sena (@senajp).</description>
    <link>https://forem.com/senajp</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F808031%2F3b21246b-ca26-435d-b62f-8a3c039cfffc.jpg</url>
      <title>Forem: João Pedro Gomes de Sena</title>
      <link>https://forem.com/senajp</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/senajp"/>
    <language>en</language>
    <item>
      <title>Merge de pdf's no PHP usando LARAVEL</title>
      <dc:creator>João Pedro Gomes de Sena</dc:creator>
      <pubDate>Mon, 30 Oct 2023 20:35:26 +0000</pubDate>
      <link>https://forem.com/senajp/agrupar-pdfs-no-php-usando-laravel-2bid</link>
      <guid>https://forem.com/senajp/agrupar-pdfs-no-php-usando-laravel-2bid</guid>
      <description>&lt;h2&gt;
  
  
  Eai, bão demais? 🤙🏽
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;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á. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Esse final de semana eu precisei lidar com o &lt;strong&gt;agrupamento de pdfs&lt;/strong&gt; em um projeto laravel, resolvi documentar porque creio que poderá ser útil não só para outras pessoas mas para mim mesmo. &lt;/p&gt;

&lt;p&gt;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).&lt;/p&gt;




&lt;h3&gt;
  
  
  ⊕ Instalando a dependência ⊕
&lt;/h3&gt;

&lt;p&gt;A lib que usarei é a &lt;strong&gt;PDFMerger&lt;/strong&gt;, para instalar no seu projeto você precisará usar o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer require clegginabox/pdf-merger:dev-master
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  &lt;u&gt;Show me the code&lt;/u&gt; 👨🏽‍💻
&lt;/h3&gt;

&lt;p&gt;Primeiro irei mostrar o exemplo completo e após irei detalhar como eu o usei:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;groupPdf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;array&lt;/span&gt; &lt;span class="nv"&gt;$params&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nv"&gt;$storage&lt;/span&gt;   &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="nc"&gt;Storage&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;disk&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;storageDefineDisk&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
        &lt;span class="nv"&gt;$basePath&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"main-folder/"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nv"&gt;$pdfMerger&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;app&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="nc"&gt;Clegginabox\PDFMerger\PDFMerger&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nv"&gt;$storage&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;exists&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$basePath&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nv"&gt;$storage&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;makeDirectory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$basePath&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$params&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nv"&gt;$param&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nv"&gt;$pdfName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'name-'&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nb"&gt;uniqid&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="s1"&gt;'.pdf'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="nv"&gt;$file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$basePath&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$pdfName&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="nv"&gt;$storage&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$param&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'pdf'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;

            &lt;span class="nv"&gt;$pdfMerger&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;addPDF&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$storage&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
            &lt;span class="nv"&gt;$deleteFile&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="nv"&gt;$fileMescled&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"mescled-pdf-"&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="s1"&gt;'-'&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nb"&gt;uniqid&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="s1"&gt;'.pdf'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nv"&gt;$fullPath&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$basePath&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$fileMescled&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="nv"&gt;$pdfMerger&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;merge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'file'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$storage&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$fullPath&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

        &lt;span class="nv"&gt;$storage&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nb"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$deleteFile&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;u&gt;Bom então vamos passo a passo:&lt;/u&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;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 &lt;strong&gt;disk que é usado em produção&lt;/strong&gt; e caso contrário é selecionado o &lt;strong&gt;local&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;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).&lt;/li&gt;
&lt;li&gt;Agora precisamos instanciar a nossa lib, a mesma é instanciada com o &lt;strong&gt;app&lt;/strong&gt; para a resolução das dependências.&lt;/li&gt;
&lt;li&gt;Verifico se a pasta principal existe, caso contrário eu a crio (eu sou bem chato com &lt;strong&gt;if's&lt;/strong&gt;, eu colocaria isso em uma outra função, mas tudo bem, é só um exemplo).&lt;/li&gt;
&lt;li&gt;Logo após eu inicio o foreach com os &lt;strong&gt;pdf's&lt;/strong&gt; recebidos pela função.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  &lt;u&gt;Dentro do foreach:&lt;/u&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Já &lt;strong&gt;dento do foreach&lt;/strong&gt; o primeiro passo é criar o nome do arquivo pdf.&lt;/li&gt;
&lt;li&gt;Depois criamos uma variável onde concatenaremos o &lt;strong&gt;nome do arquivo base&lt;/strong&gt; com o &lt;strong&gt;nome do pdf que criaremos&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Agora chamaremos o &lt;strong&gt;storage&lt;/strong&gt; e salvaremos o &lt;strong&gt;pdf&lt;/strong&gt; no &lt;strong&gt;caminho&lt;/strong&gt; definido.&lt;/li&gt;
&lt;li&gt;Finalmente chamaremos a lib, utilizando a função &lt;strong&gt;add pdf&lt;/strong&gt;, passando para ela o &lt;strong&gt;path&lt;/strong&gt; do &lt;strong&gt;pdf&lt;/strong&gt; criado.&lt;/li&gt;
&lt;li&gt;Por fim colocamos o path completo do arquivo criado dentro de um array para excluirmos ele posteriormente.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  &lt;u&gt;Finalmente o merge:&lt;/u&gt;
&lt;/h3&gt;

&lt;p&gt;Por fim, a &lt;strong&gt;$fileMescled&lt;/strong&gt; é a variável que conterá o nome do arquivo &lt;strong&gt;pdf&lt;/strong&gt; que irá ser criado, depois concatenamos com o &lt;strong&gt;basepath&lt;/strong&gt;. E finalmente chamaremos a função &lt;strong&gt;MERGE&lt;/strong&gt; da lib que fará o merge dos pdfs, para essa função primeiro passamos o primeiro parâmetro (output method) como &lt;strong&gt;file&lt;/strong&gt; e o segundo argumento o caminho completo que o nosso arquivo resultante do &lt;strong&gt;merge&lt;/strong&gt; deve ser salvo.&lt;/p&gt;

&lt;p&gt;E na última linha apagamos todos os pdf's criados no foreach que foram "merjados".&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;u&gt;Conclusão:&lt;/u&gt;
&lt;/h3&gt;

&lt;p&gt;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! &lt;/p&gt;

</description>
      <category>php</category>
      <category>laravel</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
