Qual biblioteca escolher
| Biblioteca | Licença | Precisa de | Melhor para |
|---|---|---|---|
| PyMuPDF4LLM | AGPL 3.0, ou licença comercial paga | Só pip | PDFs de texto rápidos e precisos; títulos e tabelas |
| MarkItDown | MIT | Só pip | Muitos tipos de arquivo numa só chamada |
| Docling | MIT | PyTorch, download de modelos | Layouts complexos, tabelas, saída estruturada |
| Marker | Código Apache 2.0; pesos do modelo sob licença OpenRAIL-M modificada | PyTorch, e um servidor de inferência para OCR | Artigos cheios de fórmulas e digitalizações, de preferência com GPU |
As versões abaixo eram as atuais na data no topo desta página. Se você só tem alguns PDFs, não precisa de nenhuma: o conversor da nossa página inicial faz o mesmo no seu navegador.
PyMuPDF4LLM
A exportação para Markdown do PyMuPDF. Desde o PyMuPDF 2.0 ela vem dentro do pacote pymupdf; o nome de importação continua pymupdf4llm.
pip install pymupdf
import pymupdf4llm
md = pymupdf4llm.to_markdown("report.pdf")
open("report.md", "w", encoding="utf-8").write(md)
Opções úteis:
# Só algumas páginas (a partir de 0), como um dict por página com seus metadados
pages = pymupdf4llm.to_markdown("report.pdf", pages=[0, 1, 2], page_chunks=True)
for p in pages:
print(p["metadata"]["page_number"], len(p["text"]))
Para páginas digitalizadas, instale também um motor de OCR: com pip install rapidocr onnxruntime, o PyMuPDF lê páginas sem camada de texto.
Licença: o PyMuPDF tem licença dupla: GNU AGPL 3.0 ou uma licença comercial da Artifex. A AGPL exige que você publique seu próprio código-fonte se distribuir o software ou oferecê-lo como serviço em rede, então verifique isso antes de usá-lo num produto fechado.
No nosso benchmark, o PyMuPDF4LLM 2.1 manteve em média 99% do texto principal e teve a melhor ordem de leitura dos três conversores avaliados.
MarkItDown
O conversor da Microsoft para muitos formatos: PDF, Word, PowerPoint, Excel, HTML, EPUB e mais.
pip install 'markitdown[pdf]'
from markitdown import MarkItDown
md = MarkItDown()
result = md.convert("report.pdf")
open("report.md", "w", encoding="utf-8").write(result.markdown)
Pela linha de comando: markitdown report.pdf -o report.md.
Licença: MIT.
Bom saber: para PDFs ele extrai o texto com pdfminer.six e pdfplumber. O resultado não tem títulos, mantém as quebras de linha e os hifens de fim de linha do PDF, e a instalação padrão não tem OCR. É a escolha certa quando os PDFs são uma pequena parte de uma pilha misturada de arquivos de escritório. Nossa página sobre o MarkItDown tem os detalhes.
Docling
Um kit de conversão de documentos que nasceu no IBM Research Zurich e hoje é mantido pela LF AI & Data Foundation. Ele roda modelos de layout, tabelas e OCR, então instala o PyTorch e baixa os modelos no primeiro uso. Além de PDF, lê Word, PowerPoint, Excel, HTML, imagens e mais.
pip install docling
from docling.document_converter import DocumentConverter
converter = DocumentConverter()
result = converter.convert("report.pdf")
md = result.document.export_to_markdown()
open("report.md", "w", encoding="utf-8").write(md)
Pela linha de comando: docling report.pdf grava um arquivo .md na pasta atual.
Licença: MIT. Além de Markdown, o documento pode ser exportado para HTML e para um formato JSON sem perdas que guarda as informações de layout para processamento posterior.
Marker
O conversor da Datalab, construído em torno dos seus próprios modelos de visão. É forte em fórmulas e digitalizações, e mais pesado de rodar.
pip install marker-pdf
O Marker precisa do PyTorch e, para OCR, inicia um servidor de inferência no primeiro uso: vLLM numa GPU NVIDIA, ou o binário llama-server do llama.cpp numa CPU ou num Apple Silicon.
from marker.converters.pdf import PdfConverter
from marker.models import create_model_dict
from marker.output import text_from_rendered
converter = PdfConverter(artifact_dict=create_model_dict())
rendered = converter("report.pdf")
text, _, images = text_from_rendered(rendered)
open("report.md", "w", encoding="utf-8").write(text)
Pela linha de comando: marker_single report.pdf.
Licença: o código é Apache 2.0. Os pesos do modelo usam uma licença AI Pubs OpenRAIL-M modificada, gratuita para pesquisa, uso pessoal e startups com menos de 5 milhões de dólares em investimento ou receita; uso comercial maior precisa de licença da Datalab.
Converter uma pasta de PDFs
O mesmo laço funciona com qualquer uma das bibliotecas; aqui com o PyMuPDF4LLM:
from pathlib import Path
import pymupdf4llm
src, out = Path("pdfs"), Path("markdown")
out.mkdir(exist_ok=True)
for pdf in sorted(src.glob("*.pdf")):
try:
md = pymupdf4llm.to_markdown(str(pdf))
except Exception as e: # um arquivo danificado ou criptografado não deve parar o lote
print(f"skipped {pdf.name}: {e}")
continue
(out / f"{pdf.stem}.md").write_text(md, encoding="utf-8")
Quando um script não é a ferramenta certa
- Poucos arquivos, uma vez só: soltá-los no conversor é mais rápido que montar um ambiente, e você confere cada página com o Markdown dela.
- Documentos sensíveis numa máquina compartilhada: o conversor no navegador não precisa de instalação e mantém o arquivo na aba.
- Você quer contagem de tokens e chunks para RAG sem escrever isso: veja PDF para Markdown para LLMs.
Perguntas frequentes
Qual biblioteca é a mais rápida?
Em PDFs de texto, o MarkItDown e o PyMuPDF4LLM levam de uma fração de segundo a alguns segundos por documento num notebook. O Docling e o Marker rodam modelos neurais e são bem mais lentos sem GPU.
Qual lida melhor com tabelas?
Das duas que medimos, o PyMuPDF4LLM produziu tabelas Markdown de verdade, e o MarkItDown quase nunca. O Docling e o Marker usam modelos de tabela e costumam ser recomendados para tabelas complexas; teste nos seus próprios documentos.
Posso usá-las num produto comercial?
MarkItDown e Docling são MIT, o que permite. O PyMuPDF exige cumprir a AGPL ou uma licença comercial. O código do Marker é Apache 2.0, mas os pesos do modelo têm limites de receita para uso comercial.
Existe uma opção em JavaScript?
O próprio pdftomd roda em JavaScript e WebAssembly no navegador. Seu motor de texto é o pacote de código aberto @firecrawl/pdf-inspector-wasm, e o OCR é o PaddleOCR rodando no ONNX Runtime Web. Veja a página de licenças para cada componente.