Como Adicionar Números de Página a um PDF (Grátis, Sem Instalar Nada)
Adicionar números de página a um PDF antes de enviar um relatório, tese ou contrato é uma tarefa comum de última hora. A maioria dos softwares de PDF cobra ou instala um aplicativo que você nunca vai usar de novo. Veja como fazer sem nenhum dos dois.
No navegador (sem instalar nada)
Abra a ferramenta de numeração de páginas PDF, carregue seu PDF, escolha a posição (topo ou rodapé, esquerda/centro/direita), selecione o tamanho da fonte e a margem, e baixe o resultado. Tudo roda no navegador — o arquivo nunca sai do seu dispositivo.
A ferramenta lida com a maioria dos PDFs do mundo real: documentos escaneados, relatórios exportados do Word e PDFs gerados por qualquer aplicativo.
Python: pypdf
pypdf é uma biblioteca Python pura que lê e escreve PDFs sem dependências binárias.
pip install pypdf reportlab
from pypdf import PdfReader, PdfWriter
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
import io
def add_page_numbers(input_path: str, output_path: str, start: int = 1):
reader = PdfReader(input_path)
writer = PdfWriter()
for i, page in enumerate(reader.pages):
page_num = i + start
# Cria um overlay PDF com apenas o número da página
packet = io.BytesIO()
c = canvas.Canvas(packet, pagesize=(
float(page.mediabox.width),
float(page.mediabox.height)
))
# Desenha o número centralizado na parte inferior
c.setFont('Helvetica', 10)
x = float(page.mediabox.width) / 2
y = 20 # 20 pts da borda inferior
c.drawCentredString(x, y, str(page_num))
c.save()
# Mescla o overlay na página
packet.seek(0)
from pypdf import PdfReader as PR
overlay = PR(packet).pages[0]
page.merge_page(overlay)
writer.add_page(page)
with open(output_path, 'wb') as f:
writer.write(f)
add_page_numbers('report.pdf', 'report-numbered.pdf')
Pular a primeira página (capa):
def add_page_numbers_skip_first(input_path: str, output_path: str):
reader = PdfReader(input_path)
writer = PdfWriter()
for i, page in enumerate(reader.pages):
if i == 0:
# Copia a primeira página sem número
writer.add_page(page)
continue
page_num = i # página 2 recebe o número 1 (i=1), etc.
packet = io.BytesIO()
c = canvas.Canvas(packet, pagesize=(
float(page.mediabox.width),
float(page.mediabox.height)
))
c.setFont('Helvetica', 10)
c.drawCentredString(float(page.mediabox.width) / 2, 20, str(page_num))
c.save()
packet.seek(0)
overlay = PdfReader(packet).pages[0]
page.merge_page(overlay)
writer.add_page(page)
with open(output_path, 'wb') as f:
writer.write(f)
Formato "Página X de Y":
def add_page_numbers_with_total(input_path: str, output_path: str):
reader = PdfReader(input_path)
total = len(reader.pages)
writer = PdfWriter()
for i, page in enumerate(reader.pages):
packet = io.BytesIO()
c = canvas.Canvas(packet, pagesize=(
float(page.mediabox.width),
float(page.mediabox.height)
))
c.setFont('Helvetica', 10)
label = f'Página {i + 1} de {total}'
c.drawCentredString(float(page.mediabox.width) / 2, 20, label)
c.save()
packet.seek(0)
overlay = PdfReader(packet).pages[0]
page.merge_page(overlay)
writer.add_page(page)
with open(output_path, 'wb') as f:
writer.write(f)
Python: fpdf2 (criar um PDF do zero)
Se você está gerando um PDF do zero e quer números de página embutidos:
from fpdf import FPDF
class NumberedPDF(FPDF):
def footer(self):
self.set_y(-15) # 15mm do rodapé
self.set_font('Helvetica', 'I', 8)
self.cell(0, 10, f'Página {self.page_no()}', align='C')
pdf = NumberedPDF()
pdf.set_auto_page_break(auto=True, margin=15)
for i in range(1, 6):
pdf.add_page()
pdf.set_font('Helvetica', size=12)
pdf.cell(0, 10, f'Conteúdo na página {i}', ln=True)
pdf.output('document-with-numbers.pdf')
Linha de comando: pdftk
pdftk é uma faca suíça para manipulação de PDFs. Ele não adiciona números de página diretamente, mas pode carimbar um PDF de marca d'água (contendo números de página) em cada página de outro PDF.
# Instalar
brew install pdftk-java # macOS
sudo apt install pdftk # Ubuntu
# Separar em páginas individuais
pdftk input.pdf burst output page_%04d.pdf
# Adicionar números por página com outra ferramenta e remontar
pdftk page_*.pdf cat output numbered.pdf
Para numeração de páginas, a abordagem Python acima é mais simples.
Linha de comando: cpdf (comercial, grátis para uso não comercial)
cpdf é a ferramenta PDF de linha de comando mais completa e tem numeração nativa:
# Adiciona números de página centralizados na parte inferior
cpdf -add-text "%Page" -bottom 20pt input.pdf -o output.pdf
# Números no formato "Página X de Y"
cpdf -add-text "Page %Page of %EndPage" -bottom 20pt -font "Helvetica" -font-size 10 input.pdf -o output.pdf
# Canto superior direito
cpdf -add-text "%Page" -topright 20pt input.pdf -o output.pdf
# Começar a numeração a partir de uma página específica (pular as 2 primeiras)
cpdf -add-text "%Page" -bottom 20pt -firstpage 3 input.pdf -o output.pdf
Opções de posição
| Posição | Formato | Uso típico |
|---|---|---|
| Centro inferior | 1, 2, 3 |
Relatórios, teses, livros |
| Direita inferior | 1, 2, 3 |
Documentos comerciais |
| Centro superior | 1, 2, 3 |
Alguns periódicos acadêmicos |
| Centro inferior | Página 1 de 10 |
Documentos legais, contratos |
| Alternando esq./dir. | 1 / 1 |
Layouts de impressão frente e verso |
Para a maioria dos casos, centro inferior com número simples é a escolha certa — é a convenção que os leitores esperam.
Pontos principais
- A ferramenta no navegador resolve a numeração avulsa sem instalar nenhum software.
pypdf+reportlabdá controle programático completo em Python — posição, fonte, formato, pular páginas.fpdf2é o caminho mais simples se você está gerando um PDF do zero e quer números embutidos desde o início.cpdfé a opção de linha de comando mais poderosa para scripts de automação.- Comece a numeração na página 2 se o documento tem capa — a capa não deve mostrar "1".