Converter vários PDFs para Markdown de uma vez só

Por Equipe pdftomd.tools · Atualizado em · 8 min de leitura

Para converter vários PDFs para Markdown de uma vez, selecione todos numa página de conversão em lote, como o nosso conversor de vários PDFs, e baixe um ZIP. Para centenas de arquivos ou uma tarefa que se repete, um loop curto em Python funciona melhor, e para layouts difíceis, o comando de pasta do marker. Seja qual for o caminho, confira depois se nenhum resultado saiu vazio.

Ilustração: um leque de arquivos PDF escorrendo para dentro de um arquivo ZIP com arquivos Markdown

Escolher o método pela quantidade

O caminho certo depende menos dos PDFs e mais de quantos são e de quantas vezes a tarefa se repete. De forma geral:

  • De alguns a algumas dezenas, uma vez só: uma página em lote no navegador. Nada para instalar, e os arquivos ficam no seu dispositivo.
  • Centenas, ou toda semana: um loop em Python sobre uma pasta. Dá para agendar, registrar logs e manter a estrutura de pastas.
  • Escaneamentos, formulários, fórmulas, layouts incomuns: uma ferramenta baseada em modelos, como o marker. Num notebook comum ela é bem mais lenta. Ela foi feita para ler com OCR páginas sem camada de texto, mas na nossa execução em CPU a página escaneada ainda saiu vazia; teste alguns arquivos primeiro.
Ilustração: três cartões com pilhas de PDFs cada vez maiores, atendidas por uma janela de navegador, um terminal e um rack de servidores
Pilha pequena: navegador. Pilha recorrente: script. Pilha enorme ou difícil: uma ferramenta baseada em modelos numa máquina potente.

Para comparar os três caminhos de forma justa, usamos um conjunto de 20 arquivos com 40 páginas: doze exemplos de tabelas e layout, um guia em inglês, um relatório em chinês de 11 páginas, um relatório de 4 páginas com cabeçalhos repetidos, uma página escaneada sem camada de texto e dois arquivos diferentes, ambos chamados notes.pdf, em duas pastas. Tudo rodou na nossa máquina de build (Linux x86_64, 8 vCPU, 16 GB RAM, no GPU).

Converter vários PDFs para Markdown no navegador

Antes de começar, abra dois ou três dos PDFs e tente selecionar uma frase. Se o texto for selecionável, o arquivo tem camada de texto e qualquer método abaixo funciona. Se nada for selecionado, é um escaneamento ou uma imagem, e só uma ferramenta de OCR vai tirar palavras dali. Saber a mistura antes poupa uma segunda rodada.

Abra a página em lote, clique em Escolher arquivos (ou solte uma seleção na área indicada) e pegue todos os PDFs de uma vez. Cada arquivo é convertido na aba, um depois do outro, e a página oferece um único ZIP com um .md por PDF. Como o trabalho é local, a velocidade depende do seu dispositivo, não de um upload. É o jeito mais rápido de converter vários PDFs para Markdown quando todos estão no mesmo computador.

Captura de tela: converter vários PDFs para Markdown de uma vez na nossa página em lote, lista de resultados com número de páginas e tabelas e o botão Baixar ZIP
Captura de tela da nossa execução com 20 arquivos: cada arquivo ganha uma linha com o número de páginas e de tabelas.

Nos nossos testes, o conjunto inteiro, da escolha dos arquivos até o ZIP pronto, levou cerca de 0,8 segundo no Chrome 155.0.8059.84 (três execuções, entre 0,8 e 1,0 segundo). O ZIP tinha 20 arquivos Markdown. Os dois notes.pdf saíram como notes.md e notes-2.md, nenhum sobrescreveu o outro, e a página escaneada foi sinalizada na lista em vez de falhar em silêncio.

Os limites: um navegador não consegue ler sozinho uma árvore de pastas, então arquivos de várias pastas acabam lado a lado num só ZIP, e quantidades muito grandes esbarram na memória da aba. Para algumas centenas de arquivos, divida a seleção em rodadas ou passe para um script.

Um loop em Python com pymupdf4llm

Um script em Python para essa tarefa cabe em poucas linhas. Este converte uma pasta de PDFs para Markdown: percorre a pasta, mantém a mesma estrutura na saída (então os dois arquivos notes ficam separados) e continua se algum arquivo falhar:

import pathlib, pymupdf4llm

src, out = pathlib.Path("pdfs"), pathlib.Path("markdown")
for pdf in sorted(src.rglob("*.pdf")):
    dest = out / pdf.relative_to(src).with_suffix(".md")
    dest.parent.mkdir(parents=True, exist_ok=True)
    try:
        dest.write_text(pymupdf4llm.to_markdown(str(pdf)), encoding="utf-8")
    except Exception as e:
        print(f"skipped {pdf}: {e}")
Instale com pip install pymupdf4llm. A biblioteca é AGPL-3.0; a Artifex vende uma licença comercial.

Com os mesmos 20 arquivos, o loop terminou em 5,3 segundos nos nossos testes, incluindo a inicialização do Python e a importação da biblioteca. Ele gravou 20 arquivos. Dois saíram vazios: a página escaneada, que não tem texto legível, e uma página com uma tabela girada 90 graus. Para milhares de arquivos, o mesmo loop pode rodar num pool de processos, um por núcleo de CPU, já que cada arquivo é independente. Nosso guia de Python cobre as opções para tabelas e intervalos de páginas, e a nossa comparação de bibliotecas mostra como o pymupdf4llm se sai diante de duas alternativas.

O comando de pasta do marker

O marker tem um comando para uma pasta inteira: marker /path/to/pdfs --output_dir out. Ele só lê o primeiro nível da pasta (o script lista com os.listdir), por isso copiamos antes nossos arquivos para uma pasta plana. Opções úteis: --workers para processos em paralelo, --skip_existing para retomar uma execução interrompida e --max_files para um teste.

Com a configuração padrão na nossa máquina sem GPU, a pasta levou 5 min 51 s nos nossos testes, contando o carregamento dos modelos, e gerou 20 resultados. É umas 66 vezes o tempo do loop em Python. Ele recuperou a tabela girada, mas escreveu duas vezes, e mesmo assim devolveu um arquivo vazio para a página escaneada na nossa execução. Numa máquina com GPU compatível o cenário muda; num notebook, use o marker só para os arquivos que precisam dele.

Nomes de arquivo, duplicados e estrutura de pastas

Ilustração: duas pastas, cada uma com um arquivo de mesmo nome, reunidas num ZIP que mantém dois arquivos Markdown separados
Dois arquivos, um nome: o ZIP precisa manter os dois.
  • Duplicados: quando você converte muitos PDFs de uma vez, decida o que fazer com o mesmo nome de arquivo em duas pastas. Nossa página em lote acrescenta um número; o loop acima mantém as subpastas; um script ingênuo sobrescreve o primeiro arquivo sem avisar.
  • Estrutura: se a árvore de pastas tem significado (uma pasta por cliente ou por ano), mantenha, seja com relative_to como acima, seja usando a página em lote uma vez por pasta.
  • Nomes: mantenha o nome base do PDF no .md e você sempre vai achar a fonte. Para nomes mais legíveis, renomeie depois no seu app de notas.
  • Um ZIP de arquivos Markdown é o jeito mais simples de entregar para outra pessoa; uma pasta é melhor se a saída for para outro script.

Controle de qualidade: achar saídas escaneadas e vazias

Quando você converte vários PDFs para Markdown numa rodada só, é fácil deixar passar problemas que um arquivo sozinho mostraria na hora. Todas as ferramentas do nosso teste geraram pelo menos um arquivo vazio ou quase vazio, e nenhuma consegue transformar em texto uma página ilegível sem OCR. Então, depois de cada execução grande, procure arquivos que ficaram curtos demais:

# Markdown files under 100 bytes are usually scans or image-only pages
find markdown -name '*.md' -size -100c
Rode na pasta de saída (ou no ZIP descompactado).
Captura de tela: lista de resultados do lote com um aviso num arquivo que só contém uma imagem, parece escaneado e não tem camada de texto
Captura de tela: o arquivo que é só imagem aparece sinalizado na lista; o Markdown dele avisa que não há texto extraível.

Depois abra algumas saídas ao acaso e compare com os PDFs: os títulos, uma tabela, o último parágrafo. Se os arquivos forem para um modelo de chat, nosso artigo sobre o melhor formato de documento para o ChatGPT explica por que essa conferência vale a pena para ter um Markdown limpo.

Nossos tempos com 20 arquivos

Os mesmos 20 PDFs (40 páginas) por três caminhos, segundo nossos testes (19 out. 2026, só CPU)
MétodoTempoSaídasSaídas vaziasNomes duplicados
Nossa página em lote (navegador)0,8 s20scanned-sample.mdNumerados (notes, notes-2)
Loop em Python, pymupdf4llm 1.28.25,3 s20rotated.md, scanned-sample.mdMantidos em subpastas
Comando de pasta do marker 2.0.05 min 51 s20scanned-sample.mdSó pasta plana (renomeados por nós)
O tempo do navegador vai da escolha dos arquivos até o ZIP pronto. Os tempos de Python e marker incluem a inicialização; no marker, também o carregamento dos modelos. Uma máquina só e um conjunto pequeno: leia como ordens de grandeza.

Para a maioria das pessoas, a conclusão é simples: para converter vários PDFs para Markdown de uma tacada, comece no navegador, escreva um script quando a tarefa se repetir e guarde a ferramenta baseada em modelos para as páginas que as outras não conseguem ler.

Fontes

  1. PyMuPDF4LLM (README and licence) — Artifex, GitHub
  2. marker (README, licence and model licence) — Datalab, GitHub
  3. pathlib: Path.rglob — Python documentation
  4. find(1) — GNU findutils manual

Perguntas frequentes

Como converto vários PDFs para Markdown de uma vez?

Selecione todos os arquivos numa página em lote como a nossa e baixe o ZIP, ou rode um loop curto em Python sobre a pasta. Depois confira se nenhuma saída ficou vazia.

Existe limite de arquivos na página em lote?

Não há um número fixo; o limite é a memória do seu navegador. Nos nossos testes, 20 arquivos com 40 páginas levaram cerca de um segundo. Para centenas de arquivos grandes, trabalhe em rodadas ou use um script.

O que acontece com arquivos de mesmo nome?

Nossa página em lote numera o segundo (notes.md, notes-2.md). Num script, você decide: manter as subpastas, acrescentar um sufixo ou pular.

Dá para converter PDFs escaneados em lote?

Não com uma ferramenta que lê a camada de texto: escaneamentos saem vazios, e nossa ferramenta sinaliza. Você precisa de uma etapa de OCR. O marker foi feito para isso, mas na nossa execução sem GPU devolveu um resultado vazio para a página escaneada; teste uma amostra antes de um trabalho grande.

Dá para converter PDF para MD em lote de forma agendada?

Sim, com um script. Coloque o loop em Python num cron ou numa tarefa agendada e adicione uma lógica do tipo --skip_existing para converter só arquivos novos.

A página em lote envia meus arquivos?

Não. A conversão acontece na aba do navegador e o ZIP é criado no seu dispositivo.