Como funciona o EditePDF

A engine técnica que faz a edição in-place — e o motivo de ser diferente de iLovePDF, Smallpdf e PDFescape.

Edição in-place real (esquerda) vs sobrepor caixa branca (direita) — ilustração baseada no comportamento real de cada ferramenta.

O problema fundamental

Um PDF não é um documento de texto. É uma sequência de instruções de desenho — "desenha esse caractere nessa posição com essa fonte, esse tamanho e essa cor". Não há parágrafos, células, linhas. Tudo é coordenada.

Editar texto em PDF significa, tecnicamente, apagar uma instrução de desenho e substituir por outra. A maioria das ferramentas brasileiras evita esse problema apenas adicionando novas instruções por cima das antigas — gerando documentos visualmente "remendados".

iLovePDF · Smallpdf

Apaga o texto antigo cobrindo com retângulo branco. Adiciona caixa de texto nova por cima. Resultado: fonte ligeiramente diferente, alinhamento aproximado, cor de fundo perdida.

EditePDF

Detecta cada caractere com posição, fonte, tamanho e cor. Redaciona com PyMuPDF preservando o fundo. Desenha o novo texto no baseline exato. Visualmente idêntico ao original.

Os 5 passos do nosso pipeline

1
Extração de spans

Lemos o PDF com PyMuPDF. Cada bloco de texto vira um span com coordenadas exatas (x, y, width, height), nome da fonte, tamanho, cor RGB e flags de bold/italic.

2
Amostragem de cor de fundo

Pra cada span, renderizamos a página em DPI 72 (1pt PDF = 1px) e amostramos pixels da bbox descartando pixels escuros (texto). Cor mais frequente = cor de fundo da célula. É como sabemos que aquela célula amarela é amarela.

3
Mapeamento de fontes

Convertemos cada fonte do PDF original pra um dos 14 base fonts do PostScript (helv, hebo, tiro, cour, etc). 95% dos casos isso é visualmente indistinguível. Pra fontes raras pode haver shift de 1-2 pixels.

4
Redação que preserva fundo

Quando você edita, marcamos a região como add_redact_annot(bbox, fill=None) — apaga o texto sem pintar a célula. Aplicamos só nas páginas tocadas, não no documento inteiro (performance).

5
Desenho do novo texto

page.insert_text(origin, novo_texto, ...) desenha o novo texto exatamente no baseline do original. Mesma fonte (mapeada), mesmo tamanho, mesma cor RGB. O resultado é um PDF onde a edição é invisível.

Stack técnica

Backend: Flask 3.0 + PyMuPDF 1.27+ (fitz). Edição in-place é feita 100% no servidor, em Python, sem dependência de Adobe SDK ou Java.
Frontend: PDF.js 3.11 (Mozilla) renderiza o PDF original no canvas. Cada span vira um div contenteditable sobreposto, alinhado pixel a pixel. Vanilla JS, sem React/Vue/Angular.
Estética: CSS puro com tokens iOS HIG (systemBlue #007AFF, SF Pro, radius 12px). Dark mode automático via prefers-color-scheme.
Pagamento: Stripe (cartão + PIX recorrente). Webhooks atualizam status em tempo real.
E-mail: Resend para magic link (login sem senha, válido 30min).
DB: SQLite com tabelas mínimas — users, edits_log, paid_pdfs.

Limites técnicos honestos

Não vendemos magia. Há casos onde a engine atual ainda não cobre:

Privacidade dos seus arquivos

O PDF que você sobe fica armazenado temporariamente no servidor pra permitir edição e download. É apagado automaticamente após 7 dias de inatividade por um job que roda diariamente.

Não acessamos, lemos ou compartilhamos o conteúdo. Conformidade LGPD. Veja Política de Privacidade.

Por que isso importa

Adobe Acrobat (R$ 76/mês) faz edição in-place porque tem 30 anos de engenharia em PDFs. iLovePDF e Smallpdf são suítes de ferramentas — focam em juntar/comprimir/converter, e edição é uma feature secundária.

O EditePDF é especialista. Faz uma coisa: edita texto em PDF preservando o layout original. O resto vem como tier 1 do roadmap (juntar, comprimir, dividir) só depois de termos conteúdo SEO suficiente pra que o tráfego justifique a expansão.

Pronto pra ver na prática?

Suba um PDF e edite em 30 segundos. Grátis até 3 PDFs/mês.

Abrir o editor →