PDF

Conjunto abrangente de ferramentas para manipulação de PDF: extrair texto e tabelas, criar novos PDFs, mesclar/dividir documentos e lidar com formulários. Ideal para preencher formulários ou processar, gerar e analisar PDFs em escala.

O que é PDF?

Esta skill fornece um guia completo para processamento de PDFs usando bibliotecas Python e ferramentas de linha de comando. Ela cobre desde operações básicas, como leitura e extração de texto com `pypdf` e `pdfplumber`, até tarefas avançadas, como criação de PDFs com `reportlab`, extração de tabelas, OCR em PDFs escaneados com `pytesseract`, aplicação de marcas d'água, proteção por senha e extração de imagens com `pdfimages`. A skill também inclui comandos para ferramentas como `pdftotext`, `qpdf` e `pdftk`, além de uma tabela de referência rápida para escolher a melhor ferramenta para cada tarefa. Útil para desenvolvedores que precisam automatizar a manipulação de documentos PDF em Python ou via CLI, suportando plataformas como pypdf, pdfplumber, reportlab e poppler-utils.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ComposioHQ/awesome-claude-skills/tree/master/document-skills/pdf

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Guia de Processamento de PDF

Visão Geral

Este guia cobre operações essenciais de processamento de PDF usando bibliotecas Python e ferramentas de linha de comando. Para recursos avançados, bibliotecas JavaScript e exemplos detalhados, consulte o reference.md. Se precisar preencher um formulário PDF, leia o forms.md e siga suas instruções.

Início Rápido

from pypdf import PdfReader, PdfWriter

# Ler um PDF
reader = PdfReader("documento.pdf")
print(f"Páginas: {len(reader.pages)}")

# Extrair texto
texto = ""
for pagina in reader.pages:
    texto += pagina.extract_text()

Bibliotecas Python

pypdf - Operações Básicas

Mesclar PDFs

from pypdf import PdfWriter, PdfReader

writer = PdfWriter()
for arquivo_pdf in ["doc1.pdf", "doc2.pdf", "doc3.pdf"]:
    reader = PdfReader(arquivo_pdf)
    for pagina in reader.pages:
        writer.add_page(pagina)

with open("mesclado.pdf", "wb") as saida:
    writer.write(saida)

Dividir PDF

reader = PdfReader("entrada.pdf")
for i, pagina in enumerate(reader.pages):
    writer = PdfWriter()
    writer.add_page(pagina)
    with open(f"pagina_{i+1}.pdf", "wb") as saida:
        writer.write(saida)

Extrair Metadados

reader = PdfReader("documento.pdf")
meta = reader.metadata
print(f"Título: {meta.title}")
print(f"Autor: {meta.author}")
print(f"Assunto: {meta.subject}")
print(f"Criador: {meta.creator}")

Rotacionar Páginas

reader = PdfReader("entrada.pdf")
writer = PdfWriter()

pagina = reader.pages[0]
pagina.rotate(90)  # Rotacionar 90 graus no sentido horário
writer.add_page(pagina)

with open("rotacionado.pdf", "wb") as saida:
    writer.write(saida)

pdfplumber - Extração de Texto e Tabelas

Extrair Texto com Layout

import pdfplumber

with pdfplumber.open("documento.pdf") as pdf:
    for pagina in pdf.pages:
        texto = pagina.extract_text()
        print(texto)

Extrair Tabelas

with pdfplumber.open("documento.pdf") as pdf:
    for i, pagina in enumerate(pdf.pages):
        tabelas = pagina.extract_tables()
        for j, tabela in enumerate(tabelas):
            print(f"Tabela {j+1} na página {i+1}:")
            for linha in tabela:
                print(linha)

Extração Avançada de Tabelas

import pandas as pd

with pdfplumber.open("documento.pdf") as pdf:
    todas_tabelas = []
    for pagina in pdf.pages:
        tabelas = pagina.extract_tables()
        for tabela in tabelas:
            if tabela:  # Verificar se a tabela não está vazia
                df = pd.DataFrame(tabela[1:], columns=tabela[0])
                todas_tabelas.append(df)

# Combinar todas as tabelas
if todas_tabelas:
    df_combinado = pd.concat(todas_tabelas, ignore_index=True)
    df_combinado.to_excel("tabelas_extraidas.xlsx", index=False)

reportlab - Criar PDFs

Criação Básica de PDF

from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas

c = canvas.Canvas("ola.pdf", pagesize=letter)
largura, altura = letter

# Adicionar texto
c.drawString(100, altura - 100, "Olá, Mundo!")
c.drawString(100, altura - 120, "Este é um PDF criado com reportlab")

# Adicionar uma linha
c.line(100, altura - 140, 400, altura - 140)

# Salvar
c.save()

Criar PDF com Múltiplas Páginas

from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, PageBreak
from reportlab.lib.styles import getSampleStyleSheet

doc = SimpleDocTemplate("relatorio.pdf", pagesize=letter)
estilos = getSampleStyleSheet()
bloco = []

# Adicionar conteúdo
titulo = Paragraph("Título do Relatório", estilos['Title'])
bloco.append(titulo)
bloco.append(Spacer(1, 12))

corpo = Paragraph("Este é o corpo do relatório. " * 20, estilos['Normal'])
bloco.append(corpo)
bloco.append(PageBreak())

# Página 2
bloco.append(Paragraph("Página 2", estilos['Heading1']))
bloco.append(Paragraph("Conteúdo da página 2", estilos['Normal']))

# Construir PDF
doc.build(bloco)

Ferramentas de Linha de Comando

pdftotext (poppler-utils)

# Extrair texto
pdftotext entrada.pdf saida.txt

# Extrair texto preservando layout
pdftotext -layout entrada.pdf saida.txt

# Extrair páginas específicas
pdftotext -f 1 -l 5 entrada.pdf saida.txt  # Páginas 1-5

qpdf

# Mesclar PDFs
qpdf --empty --pages arquivo1.pdf arquivo2.pdf -- mesclado.pdf

# Dividir páginas
qpdf entrada.pdf --pages . 1-5 -- paginas1-5.pdf
qpdf entrada.pdf --pages . 6-10 -- paginas6-10.pdf

# Rotacionar páginas
qpdf entrada.pdf saida.pdf --rotate=+90:1  # Rotacionar página 1 em 90 graus

# Remover senha
qpdf --password=minhasenha --decrypt criptografado.pdf descriptografado.pdf

pdftk (se disponível)

# Mesclar
pdftk arquivo1.pdf arquivo2.pdf cat output mesclado.pdf

# Dividir
pdftk entrada.pdf burst

# Rotacionar
pdftk entrada.pdf rotate 1east output rotacionado.pdf

Tarefas Comuns

Extrair Texto de PDFs Escaneados

# Requer: pip install pytesseract pdf2image
import pytesseract
from pdf2image import convert_from_path

# Converter PDF para imagens
imagens = convert_from_path('escaneado.pdf')

# OCR em cada página
texto = ""
for i, imagem in enumerate(imagens):
    texto += f"Página {i+1}:\n"
    texto += pytesseract.image_to_string(imagem)
    texto += "\n\n"

print(texto)

Adicionar Marca D'Água

from pypdf import PdfReader, PdfWriter

# Criar marca d'água (ou carregar existente)
marca = PdfReader("marca.pdf").pages[0]

# Aplicar a todas as páginas
reader = PdfReader("documento.pdf")
writer = PdfWriter()

for pagina in reader.pages:
    pagina.merge_page(marca)
    writer.add_page(pagina)

with open("com_marca.pdf", "wb") as saida:
    writer.write(saida)

Extrair Imagens

# Usando pdfimages (poppler-utils)
pdfimages -j entrada.pdf prefixo_saida

# Extrai todas as imagens como prefixo_saida-000.jpg, prefixo_saida-001.jpg, etc.

Proteção por Senha

from pypdf import PdfReader, PdfWriter

reader = PdfReader("entrada.pdf")
writer = PdfWriter()

for pagina in reader.pages:
    writer.add_page(pagina)

# Adicionar senha
writer.encrypt("senhausuario", "senhadono")

with open("criptografado.pdf", "wb") as saida:
    writer.write(saida)

Referência Rápida

TarefaMelhor FerramentaComando/Código
Mesclar PDFspypdfwriter.add_page(pagina)
Dividir PDFspypdfUma página por arquivo
Extrair textopdfplumberpagina.extract_text()
Extrair tabelaspdfplumberpagina.extract_tables()
Criar PDFsreportlabCanvas ou Platypus
Mesclar via linha de comandoqpdfqpdf --empty --pages ...
OCR em PDFs escaneadospytesseractConverter para imagem primeiro
Preencher formulários PDFpdf-lib ou pypdf (veja forms.md)Veja forms.md

Próximos Passos

  • Para uso avançado do pypdfium2, consulte reference.md
  • Para bibliotecas JavaScript (pdf-lib), consulte reference.md
  • Se precisar preencher um formulário PDF, siga as instruções em forms.md
  • Para guias de solução de problemas, consulte reference.md

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

ably-automation

Automate Ably tasks via Rube MCP (Composio). Always search tools first for current schemas.

abstract-automation

Automate Abstract tasks via Rube MCP (Composio). Always search tools first for current schemas.

abuselpdb-automation

Automate Abuselpdb tasks via Rube MCP (Composio). Always search tools first for current schemas.

abyssale-automation

Automate Abyssale tasks via Rube MCP (Composio). Always search tools first for current schemas.

accelo-automation

Automate Accelo tasks via Rube MCP (Composio). Always search tools first for current schemas.

accredible-certificates-automation

Automate Accredible Certificates tasks via Rube MCP (Composio). Always search tools first for current schemas.

acculynx-automation

Automate Acculynx tasks via Rube MCP (Composio). Always search tools first for current schemas.

active-campaign-automation

Automate ActiveCampaign tasks via Rube MCP (Composio). Always search tools first for current schemas.

addresszen-automation

Automate Addresszen tasks via Rube MCP (Composio). Always search tools first for current schemas.

adobe-automation

Automate Adobe tasks via Rube MCP (Composio). Always search tools first for current schemas.

adrapid-automation

Automate Adrapid tasks via Rube MCP (Composio). Always search tools first for current schemas.

adyntel-automation

Automate Adyntel tasks via Rube MCP (Composio). Always search tools first for current schemas.

aeroleads-automation

Automate Aeroleads tasks via Rube MCP (Composio). Always search tools first for current schemas.

aero-workflow-automation

Automate Aero Workflow tasks via Rube MCP (Composio). Always search tools first for current schemas.

affinda-automation

Automate Affinda tasks via Rube MCP (Composio). Always search tools first for current schemas.

affinity-automation

Automate Affinity tasks via Rube MCP (Composio). Always search tools first for current schemas.

agencyzoom-automation

Automate Agencyzoom tasks via Rube MCP (Composio). Always search tools first for current schemas.

agent-mail-automation

Automate Agent Mail tasks via Rube MCP (Composio). Always search tools first for current schemas.

agentql-automation

Automate Agentql tasks via Rube MCP (Composio). Always search tools first for current schemas.

agenty-automation

Automate Agenty tasks via Rube MCP (Composio). Always search tools first for current schemas.

Habilidades Relacionadas