<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>python programming on File Format Blog</title>
    <link>https://blog.fileformat.com/pt/tag/python-programming/</link>
    <description>Recent content in python programming on File Format Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>pt</language>
    <lastBuildDate>Wed, 29 Jan 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.fileformat.com/pt/tag/python-programming/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Trabalhando com arquivos PDF em Python</title>
      <link>https://blog.fileformat.com/pt/programming/working-with-pdf-files-in-python/</link>
      <pubDate>Wed, 29 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://blog.fileformat.com/pt/programming/working-with-pdf-files-in-python/</guid>
      <description>Aprenda a extrair texto de um PDF em Python, girar páginas de PDF, mesclar múltiplos PDFs, dividir PDFs e adicionar marcas d&amp;#39;água aos seus PDFs usando bibliotecas Python e exemplos de código simples.</description>
      <content:encoded><![CDATA[<p><strong>Última Atualização</strong>: 29 Jan, 2025</p>
<figure class="align-center ">
    <img loading="lazy" src="images/working-with-pdf-files-in-python.png#center"
         alt="Título - Trabalhando com arquivos PDF em Python"/> 
</figure>

<p>Neste artigo, vamos guiá-lo sobre <strong>como trabalhar com arquivos PDF usando Python</strong>. Para isso, utilizaremos a biblioteca <a href="https://pypi.org/project/pypdf/"><strong>pypdf</strong></a>.</p>
<p>Usando a biblioteca <strong>pypdf</strong>, demonstraremos como realizar as seguintes operações em Python:</p>
<ul>
<li>Extração de texto de PDFs</li>
<li>Rotação de páginas de PDF</li>
<li>Mesclagem de múltiplos PDFs</li>
<li>Divisão de PDFs em arquivos separados</li>
<li>Adição de marcas d&rsquo;água a páginas de PDF</li>
</ul>
<p><em><strong>Nota</strong>: Este artigo cobre muitos detalhes valiosos, então fique à vontade para pular para as seções que mais lhe interessam! O conteúdo é organizado para fácil navegação, permitindo que você se concentre rapidamente no que for mais relevante.</em></p>
<figure class="align-center ">
    <img loading="lazy" src="images/pdf-manipulation-with-pypdf.webp#center"
         alt="Ilustração - Trabalhando com arquivos PDF em Python"/> 
</figure>

<h2 id="códigos-de-exemplo">Códigos de Exemplo</h2>
<p>Você pode baixar todo o código de exemplo usado neste artigo a partir do link a seguir. Ele inclui o código, arquivos de entrada e de saída.</p>
<ul>
<li><a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python">Exemplos de Código e Arquivos de Entrada para Trabalhar com Arquivos PDF em Python</a></li>
</ul>
<h2 id="instalar-pypdf">Instalar pypdf</h2>
<p>Para instalar o pypdf, basta executar o seguinte comando no seu terminal ou prompt de comando:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>pip install pypdf
</span></span></code></pre></div><p><strong>Nota:</strong> O comando acima diferencia maiúsculas de minúsculas.</p>
<h2 id="1-extraindo-texto-de-um-arquivo-pdf-usando-python">1. Extraindo Texto de um Arquivo PDF Usando Python</h2>
<script type="application/javascript" src="https://gist.github.com/fileformat-blog-gists/e2b43a49dbad9e89745f8f9777817acb.js?file=extract-text-from-pdf-using-pypdf-in-python.py"></script>

<h3 id="explicação-do-código"><strong>Explicação do Código</strong></h3>
<p><strong>1. Criando um Objeto Leitor de PDF</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>reader <span style="color:#f92672">=</span> PdfReader(pdf_file)
</span></span></code></pre></div><ul>
<li><code>PdfReader(pdf_file)</code> carrega o arquivo PDF em um <strong>objeto leitor</strong>.</li>
<li>Este objeto permite acesso às páginas e seu conteúdo.</li>
</ul>
<p><strong>2. Percorrendo Páginas</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#66d9ef">for</span> page_number, page <span style="color:#f92672">in</span> enumerate(reader<span style="color:#f92672">.</span>pages, start<span style="color:#f92672">=</span><span style="color:#ae81ff">1</span>):
</span></span></code></pre></div><ul>
<li><code>reader.pages</code> retorna uma lista de páginas no PDF.</li>
<li><code>enumerate(..., start=1)</code> atribui um <strong>número de página começando em 1</strong>.</li>
</ul>
<p><strong>3. Imprimindo Texto Extraído</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>    print(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;Page </span><span style="color:#e6db74">{</span>page_number<span style="color:#e6db74">}</span><span style="color:#e6db74">:&#34;</span>)
</span></span><span style="display:flex;"><span>    print(page<span style="color:#f92672">.</span>extract_text())
</span></span><span style="display:flex;"><span>    print(<span style="color:#e6db74">&#34;-&#34;</span> <span style="color:#f92672">*</span> <span style="color:#ae81ff">50</span>)  <span style="color:#75715e"># Separador para legibilidade</span>
</span></span></code></pre></div><ul>
<li><code>page.extract_text()</code> extrai texto da página atual.</li>
<li>O script imprime o texto extraído juntamente com o <strong>número da página</strong>.</li>
<li><code>&quot;-&quot; * 50</code> imprime uma linha separadora (<code>--------------------------------------------------</code>) para melhor legibilidade.</li>
</ul>
<h3 id="arquivo-pdf-de-entrada-usado-no-código">Arquivo PDF de Entrada Usado no Código</h3>
<ul>
<li><strong>Arquivo de Entrada:</strong> <a href="https://github.com/fileformat-blog-gists/code/blob/main/working-with-pdf-files-in-python/pdf-to-extract-text/">Link para Download</a></li>
</ul>
<h3 id="saída-do-código">Saída do Código</h3>
<script type="application/javascript" src="https://gist.github.com/fileformat-blog-gists/ab6976aa3a0fc2999093f5f9320a9e20.js?file=Output%20-%20extract-text-from-pdf-using-pypdf-in-python.txt"></script>

<h2 id="2-girando-páginas-de-pdf-usando-python">2. Girando Páginas de PDF Usando Python</h2>
<script type="application/javascript" src="https://gist.github.com/fileformat-blog-gists/760d480cfede4178296c353d60662e1a.js?file=rotate-pdf-page-using-pypdf-in-python.py"></script>

<h3 id="explicação-do-código-1">Explicação do Código</h3>
<p>O código basicamente gira a <strong>primeira página</strong> por <strong>90° no sentido horário</strong> e salva o PDF modificado sem afetar outras páginas.</p>
<p><strong>1. Importar Classes Necessárias</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">from</span> pypdf <span style="color:#f92672">import</span> PdfReader, PdfWriter
</span></span></code></pre></div><ul>
<li><code>PdfReader</code>: Lê o PDF de entrada.</li>
<li><code>PdfWriter</code>: Cria um novo PDF com modificações.</li>
</ul>
<p><strong>2. Definir Caminhos de Arquivo de Entrada e Saída</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>input_pdf <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;pdf-to-rotate/input.pdf&#34;</span>
</span></span><span style="display:flex;"><span>output_pdf <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;pdf-to-rotate/rotated_output.pdf&#34;</span>
</span></span></code></pre></div><ul>
<li>O script lê de <code>input.pdf</code> e salva o arquivo modificado como <code>rotated_output.pdf</code>.</li>
</ul>
<p><strong>3. Ler o PDF e Criar um Objeto Writer</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>reader <span style="color:#f92672">=</span> PdfReader(input_pdf)
</span></span><span style="display:flex;"><span>writer <span style="color:#f92672">=</span> PdfWriter()
</span></span></code></pre></div><ul>
<li><code>reader</code> carrega o PDF existente.</li>
<li><code>writer</code> é usado para armazenar as páginas modificadas.</li>
</ul>
<p><strong>4. Girar a Primeira Página em 90 Graus</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>page <span style="color:#f92672">=</span> reader<span style="color:#f92672">.</span>pages[<span style="color:#ae81ff">0</span>]
</span></span><span style="display:flex;"><span>page<span style="color:#f92672">.</span>rotate(<span style="color:#ae81ff">90</span>)  <span style="color:#75715e"># Girar 90 graus no sentido horário</span>
</span></span><span style="display:flex;"><span>writer<span style="color:#f92672">.</span>add_page(page)
</span></span></code></pre></div><ul>
<li><strong>Página 1</strong> é extraída, rotacionada <strong>90 graus</strong>, e adicionada ao novo PDF.</li>
</ul>
<p><strong>5. Adicionar Páginas Restantes Sem Mudanças</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#66d9ef">for</span> i <span style="color:#f92672">in</span> range(<span style="color:#ae81ff">1</span>, len(reader<span style="color:#f92672">.</span>pages)):
</span></span><span style="display:flex;"><span>    writer<span style="color:#f92672">.</span>add_page(reader<span style="color:#f92672">.</span>pages[i])
</span></span></code></pre></div><ul>
<li>Percorre as páginas restantes e as adiciona como estão.</li>
</ul>
<p><strong>6. Salvar o Novo PDF</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#66d9ef">with</span> open(output_pdf, <span style="color:#e6db74">&#34;wb&#34;</span>) <span style="color:#66d9ef">as</span> file:
</span></span><span style="display:flex;"><span>    writer<span style="color:#f92672">.</span>write(file)
</span></span></code></pre></div><ul>
<li>Abre <code>rotated_output.pdf</code> em modo binário de escrita e salva o novo PDF.</li>
</ul>
<p><strong>7. Imprimir Confirmação</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>print(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;Rotated page saved to </span><span style="color:#e6db74">{</span>output_pdf<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>)
</span></span></code></pre></div><ul>
<li>Exibe uma mensagem de sucesso.</li>
</ul>
<h3 id="pdf-de-entrada-usado-no-código-e-sua-saída-girada">PDF de Entrada Usado no Código e Sua Saída Girada</h3>
<ul>
<li><strong>Arquivo PDF de Entrada:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdf-to-rotate/">Link para Download</a></li>
<li><strong>Arquivo PDF Girado de Saída:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdf-to-rotate/rotated_output.pdf">Link para Download</a></li>
</ul>
<p><strong>Captura de Tela</strong>
<img loading="lazy" src="https://raw.githubusercontent.com/fileformat-blog-gists/content/main/working-with-pdf-files-in-python/rotated-pdf.png" alt="Captura de Tela da Página Girada no PDF Usando Python"  />
</p>
<h2 id="3-mesclando-arquivos-pdf-usando-python">3. Mesclando Arquivos PDF Usando Python</h2>
<p>Este script Python demonstra como <strong>mesclar múltiplos arquivos PDF</strong> de um diretório em um único PDF usando a biblioteca <strong>PyPDF</strong>.</p>
<script type="application/javascript" src="https://gist.github.com/fileformat-blog-gists/a1a571783e0f5e699678d1094bf1afa5.js?file=merge_pdf_files_using_pypdf_in_python.py"></script>

<h3 id="explicação-do-código-2">Explicação do Código</h3>
<ul>
<li>Este script mescla automaticamente todos os arquivos PDF encontrados no diretório especificado (<code>pdfs-to-merge</code>) em um único arquivo de saída (<code>merged_output.pdf</code>).</li>
<li>Ele garante que o diretório de saída exista e adiciona as páginas de cada PDF na ordem em que são listadas.</li>
<li>Ele salva o arquivo final mesclado no subdiretório <code>output-dir</code>.</li>
</ul>
<p><strong>Desmembramento do Código</strong></p>
<p><strong>1. Importar Bibliotecas</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">import</span> os
</span></span><span style="display:flex;"><span><span style="color:#f92672">from</span> pypdf <span style="color:#f92672">import</span> PdfReader, PdfWriter
</span></span></code></pre></div><ul>
<li><code>os</code>: Usado para interagir com o sistema de arquivos, como ler diretórios e gerenciar caminhos de arquivo.</li>
<li><code>PdfReader</code>: Lê o conteúdo de um arquivo PDF.</li>
<li><code>PdfWriter</code>: Cria e escreve um novo arquivo PDF.</li>
</ul>
<p><strong>2. Definir Diretório e Arquivo de Saída</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>directory <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;pdfs-to-merge&#34;</span>
</span></span><span style="display:flex;"><span>output_file <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;output-dir/merged_output.pdf&#34;</span>
</span></span></code></pre></div><ul>
<li><code>directory</code>: Especifica a pasta onde os arquivos PDF estão armazenados.</li>
<li><code>output_file</code>: Define o caminho e o nome de saída do PDF mesclado.</li>
</ul>
<p><strong>3. Criar Diretório de Saída se Não Existir</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>os<span style="color:#f92672">.</span>makedirs(os<span style="color:#f92672">.</span>path<span style="color:#f92672">.</span>join(directory, <span style="color:#e6db74">&#34;output-dir&#34;</span>), exist_ok<span style="color:#f92672">=</span><span style="color:#66d9ef">True</span>)
</span></span></code></pre></div><ul>
<li>Isso garante que o <strong>diretório de saída</strong> exista, e se não, ele o cria.</li>
</ul>
<p><strong>4. Criar um Objeto PdfWriter</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>writer <span style="color:#f92672">=</span> PdfWriter()
</span></span></code></pre></div><ul>
<li><code>writer</code> é usado para coletar e combinar todas as páginas dos PDFs.</li>
</ul>
<p><strong>5. Iterar Sobre Todos os Arquivos PDF no Diretório</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#66d9ef">for</span> file_name <span style="color:#f92672">in</span> sorted(os<span style="color:#f92672">.</span>listdir(directory)):
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> file_name<span style="color:#f92672">.</span>endswith(<span style="color:#e6db74">&#34;.pdf&#34;</span>):
</span></span><span style="display:flex;"><span>        file_path <span style="color:#f92672">=</span> os<span style="color:#f92672">.</span>path<span style="color:#f92672">.</span>join(directory, file_name)
</span></span><span style="display:flex;"><span>        print(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;Adding: </span><span style="color:#e6db74">{</span>file_name<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>)
</span></span></code></pre></div><ul>
<li>Este loop percorre todos os arquivos no diretório especificado, verificando por arquivos com extensão <code>.pdf</code>. Ele usa <code>sorted()</code> para processá-los em ordem alfabética.</li>
</ul>
<p><strong>6. Ler Cada PDF e Adicionar Páginas ao Writer</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>reader <span style="color:#f92672">=</span> PdfReader(file_path)
</span></span><span style="display:flex;"><span>writer<span style="color:#f92672">.</span>append(reader)
</span></span></code></pre></div><ul>
<li>Para cada PDF, <code>PdfReader</code> lê o arquivo, e então todas as páginas daquele PDF são adicionadas a <code>writer</code>.</li>
</ul>
<p><strong>7. Escrever o PDF Mesclado em um Arquivo de Saída</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>output_path <span style="color:#f92672">=</span> os<span style="color:#f92672">.</span>path<span style="color:#f92672">.</span>join(directory, output_file)
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">with</span> open(output_path, <span style="color:#e6db74">&#34;wb&#34;</span>) <span style="color:#66d9ef">as</span> output_pdf:
</span></span><span style="display:flex;"><span>    writer<span style="color:#f92672">.</span>write(output_pdf)
</span></span></code></pre></div><ul>
<li>Após coletar todas as páginas, <code>writer.write()</code> escreve o PDF mesclado no caminho de saída especificado.</li>
</ul>
<p><strong>8. Imprimir Confirmação</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>print(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;Merged PDF saved as: </span><span style="color:#e6db74">{</span>output_path<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>)
</span></span></code></pre></div><ul>
<li>Imprime uma mensagem de sucesso confirmando a localização do PDF mesclado salvo.</li>
</ul>
<h3 id="arquivos-pdf-de-entrada-usados-no-código-e-o-pdf-de-saída-mesclado">Arquivos PDF de Entrada Usados no Código e o PDF de Saída Mesclado</h3>
<ul>
<li><strong>Arquivos PDF de Entrada:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdfs-to-merge">Link para Download</a></li>
<li><strong>PDF de Saída Mesclado:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdfs-to-merge/output-dir">Link para Download</a></li>
</ul>
<h2 id="4-dividindo-um-pdf-usando-python">4. Dividindo um PDF Usando Python</h2>
<script type="application/javascript" src="https://gist.github.com/fileformat-blog-gists/0dee64422ac0dcf44cf027d90567bbf8.js?file=split-pdf-using-pypdf-in-python.py"></script>

<h3 id="explicação-do-código-3">Explicação do Código</h3>
<p>O script Python acima divide um PDF em páginas separadas usando a biblioteca <strong>PyPDF</strong>. Ele primeiro garante que o diretório de saída exista, depois lê o arquivo PDF de entrada. O script percorre cada página, cria um novo objeto <strong>PdfWriter</strong> e salva cada página como um arquivo PDF individual. Os arquivos de saída são nomeados sequencialmente (por exemplo, <strong>page_1.pdf, page_2.pdf</strong>) e armazenados na pasta <strong><code>output-dir</code></strong>. Por fim, ele imprime uma mensagem de confirmação para cada arquivo criado e notifica quando o processo é concluído.</p>
<h3 id="pdf-de-entrada-e-arquivos-de-saída-individuais">PDF de Entrada e Arquivos de Saída Individuais</h3>
<ul>
<li><strong>Arquivo PDF de Entrada:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdf-to-split">Link para Download</a></li>
<li><strong>Arquivos de Saída Individuais:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdf-to-split/output-dir">Link para Download</a></li>
</ul>
<h2 id="5-adicionando-uma-marca-dágua-a-um-pdf-usando-python">5. Adicionando uma Marca d&rsquo;Água a um PDF Usando Python</h2>
<p>Você pode adicionar uma marca d&rsquo;água a um PDF usando a biblioteca PyPDF sobrepondo um PDF de marca d&rsquo;água a um PDF existente. Certifique-se de que o PDF de marca d&rsquo;água tenha apenas uma página para que ele seja aplicado corretamente a cada página do PDF principal.</p>
<script type="application/javascript" src="https://gist.github.com/fileformat-blog-gists/af057943580e2fcde6a635df34d7e39a.js?file=watermark-pdf-using-pypdf-in-python.py"></script>

<h3 id="explicação-do-código-4">Explicação do Código</h3>
<p>O script Python acima lê um PDF de entrada, extrai um PDF de marca d&rsquo;água de uma página, sobrepõe a marca d&rsquo;água em cada página do PDF de entrada, e salva o PDF final com a marca d&rsquo;água.</p>
<p><strong>Desmembramento do Código</strong></p>
<p>Aqui está uma breve explicação de cada parte</p>
<p><strong>1. Importar Classes Necessárias</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">from</span> pypdf <span style="color:#f92672">import</span> PdfReader, PdfWriter
</span></span></code></pre></div><ul>
<li><strong><code>PdfReader</code></strong> é usado para ler PDFs existentes.</li>
<li><strong><code>PdfWriter</code></strong> é usado para criar e escrever um novo PDF.</li>
</ul>
<p><strong>2. Definir Caminhos de Arquivo</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>input_pdf <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;pdf-to-watermark/input.pdf&#34;</span>
</span></span><span style="display:flex;"><span>watermark_pdf <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;pdf-to-watermark/watermark.pdf&#34;</span>
</span></span><span style="display:flex;"><span>output_pdf <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;pdf-to-watermark/output_with_watermark.pdf&#34;</span>
</span></span></code></pre></div><ul>
<li><code>input_pdf</code>: O PDF original ao qual a marca d&rsquo;água será adicionada.</li>
<li><code>watermark_pdf</code>: Um PDF de <strong>uma página</strong> separado que serve como a marca d&rsquo;água.</li>
<li><code>output_pdf</code>: O arquivo de saída que conterá as páginas com a marca d&rsquo;água.</li>
</ul>
<p><strong>3. Ler PDFs</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>reader <span style="color:#f92672">=</span> PdfReader(input_pdf)
</span></span><span style="display:flex;"><span>watermark <span style="color:#f92672">=</span> PdfReader(watermark_pdf)
</span></span></code></pre></div><ul>
<li><code>reader</code>: Lê o PDF de entrada.</li>
<li><code>watermark</code>: Lê o PDF da marca d&rsquo;água.</li>
</ul>
<p><strong>4. Criar um Objeto Writer</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>writer <span style="color:#f92672">=</span> PdfWriter()
</span></span></code></pre></div><ul>
<li>Isso será usado para criar o PDF final com a marca d&rsquo;água.</li>
</ul>
<p><strong>5. Extrair Página da Marca d&rsquo;Água</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>watermark_page <span style="color:#f92672">=</span> watermark<span style="color:#f92672">.</span>pages[<span style="color:#ae81ff">0</span>]
</span></span></code></pre></div><ul>
<li>Assume-se que o PDF da marca d&rsquo;água tenha apenas <strong>uma página</strong>, que é usada para sobrepor em todas as páginas.</li>
</ul>
<p><strong>6. Percorrer Páginas do PDF de Entrada &amp; Mesclar Marca d&rsquo;Água</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#66d9ef">for</span> page <span style="color:#f92672">in</span> reader<span style="color:#f92672">.</span>pages:
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># Mesclar a marca d&#39;água com a página atual</span>
</span></span><span style="display:flex;"><span>    page<span style="color:#f92672">.</span>merge_page(watermark_page)
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># Adicionar a página mesclada ao writer</span>
</span></span><span style="display:flex;"><span>    writer<span style="color:#f92672">.</span>add_page(page)
</span></span></code></pre></div><ul>
<li>Itera por cada página do <code>input_pdf</code>.</li>
<li><strong><code>merge_page(watermark_page)</code></strong> sobrepõe a marca d&rsquo;água sobre a página atual.</li>
<li>Adiciona a página modificada ao <code>writer</code>.</li>
</ul>
<p><strong>7. Salvar o PDF com Marca d&rsquo;Água</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#66d9ef">with</span> open(output_pdf, <span style="color:#e6db74">&#34;wb&#34;</span>) <span style="color:#66d9ef">as</span> output_file:
</span></span><span style="display:flex;"><span>    writer<span style="color:#f92672">.</span>write(output_file)
</span></span></code></pre></div><ul>
<li>Escreve as páginas modificadas em um novo arquivo PDF.</li>
</ul>
<p><strong>8. Imprimir Confirmação</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>print(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;Watermarked PDF saved as: </span><span style="color:#e6db74">{</span>output_pdf<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>)
</span></span></code></pre></div><ul>
<li>Imprime o caminho do arquivo de saída para confirmação.</li>
</ul>
<h3 id="pdf-de-entrada-pdf-de-marca-dágua-e-pdf-de-saída-com-marca-dágua">PDF de Entrada, PDF de Marca d&rsquo;Água e PDF de Saída com Marca d&rsquo;Água</h3>
<ul>
<li><strong>Arquivo PDF de Entrada:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdf-to-watermark">Link para Download</a></li>
<li><strong>Arquivo PDF de Marca d&rsquo;Água:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdf-to-watermark">Link para Download</a></li>
<li><strong>Arquivo PDF de Saída com Marca d&rsquo;Água:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdf-to-watermark">Link para Download</a></li>
</ul>
<p><strong>Captura de Tela</strong>
<img loading="lazy" src="https://raw.githubusercontent.com/fileformat-blog-gists/content/main/working-with-pdf-files-in-python/watermark-pdf.png" alt="Captura de Tela do PDF com Marca d&amp;rsquo;Água Usando Python"  />
</p>
<h2 id="conclusão">Conclusão</h2>
<p>Neste guia, exploramos operações essenciais de PDF em Python, incluindo extração de texto, rotação de páginas, mesclagem, divisão e adição de marcas d&rsquo;água. Com essas habilidades, você pode agora construir seu próprio gerenciador de PDF e automatizar várias tarefas de PDF de maneira eficiente.</p>
]]></content:encoded>
    </item>
    
  </channel>
</rss>
