Qué biblioteca elegir
| Biblioteca | Licencia | Necesita | Ideal para |
|---|---|---|---|
| PyMuPDF4LLM | AGPL 3.0, o una licencia comercial de pago | Solo pip | PDF de texto rápidos y precisos; encabezados y tablas |
| MarkItDown | MIT | Solo pip | Muchos tipos de archivo con una sola llamada |
| Docling | MIT | PyTorch, descarga de modelos | Maquetaciones complejas, tablas, salida estructurada |
| Marker | Código Apache 2.0; pesos del modelo con una licencia OpenRAIL-M modificada | PyTorch, y un servidor de inferencia para el OCR | Artículos con muchas fórmulas y escaneos, mejor con GPU |
Las versiones de abajo eran las actuales en la fecha que figura al principio de esta página. Si solo tienes unos pocos PDF, no necesitas ninguna: el conversor de nuestra página principal hace lo mismo en tu navegador.
PyMuPDF4LLM
La exportación a Markdown de PyMuPDF. Desde PyMuPDF 2.0 viene dentro del paquete pymupdf; el nombre de importación sigue siendo pymupdf4llm.
pip install pymupdf
import pymupdf4llm
md = pymupdf4llm.to_markdown("report.pdf")
open("report.md", "w", encoding="utf-8").write(md)
Opciones útiles:
# Solo algunas páginas (empezando en 0), como un dict por página con sus metadatos
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 escaneadas, instala también un motor de OCR: con pip install rapidocr onnxruntime, PyMuPDF lee las páginas que no tienen capa de texto.
Licencia: PyMuPDF tiene doble licencia: GNU AGPL 3.0 o una licencia comercial de Artifex. La AGPL te obliga a publicar tu propio código fuente si distribuyes el software o lo ofreces como servicio en red, así que compruébalo antes de usarlo en un producto cerrado.
En nuestra comparativa, PyMuPDF4LLM 2.1 conservó de media el 99% del texto principal y tuvo el mejor orden de lectura de los tres conversores evaluados.
MarkItDown
El conversor de Microsoft para muchos formatos: PDF, Word, PowerPoint, Excel, HTML, EPUB y más.
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)
Desde la línea de comandos: markitdown report.pdf -o report.md.
Licencia: MIT.
Conviene saber: con los PDF extrae el texto con pdfminer.six y pdfplumber. El resultado no tiene encabezados, mantiene los saltos de línea y los guiones de fin de línea del PDF, y la instalación por defecto no tiene OCR. Es la opción adecuada cuando los PDF son una parte pequeña de un montón mezclado de archivos de oficina. Nuestra página sobre MarkItDown tiene los detalles.
Docling
Un kit de conversión de documentos que nació en IBM Research Zurich y que ahora aloja la LF AI & Data Foundation. Ejecuta modelos de maquetación, de tablas y de OCR, así que instala PyTorch y descarga los modelos la primera vez. Además de PDF lee Word, PowerPoint, Excel, HTML, imágenes y más.
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)
Desde la línea de comandos: docling report.pdf escribe un archivo .md en la carpeta actual.
Licencia: MIT. Además de Markdown, el documento se exporta a HTML y a un formato JSON sin pérdidas que conserva la información de maquetación para procesarla después.
Marker
El conversor de Datalab, construido en torno a sus propios modelos de visión. Destaca con fórmulas y escaneos, y es más pesado de ejecutar.
pip install marker-pdf
Marker necesita PyTorch y, para el OCR, arranca un servidor de inferencia la primera vez: vLLM en una GPU NVIDIA, o el binario llama-server de llama.cpp en una CPU o en 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)
Desde la línea de comandos: marker_single report.pdf.
Licencia: el código es Apache 2.0. Los pesos del modelo usan una licencia AI Pubs OpenRAIL-M modificada, gratuita para investigación, uso personal y startups con menos de 5 millones de dólares de financiación o ingresos; un uso comercial mayor necesita una licencia de Datalab.
Convertir una carpeta de PDF
El mismo bucle sirve con cualquiera de las bibliotecas; aquí con 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: # un archivo dañado o cifrado no debe detener el lote
print(f"skipped {pdf.name}: {e}")
continue
(out / f"{pdf.stem}.md").write_text(md, encoding="utf-8")
Cuándo un script no es la herramienta adecuada
- Unos pocos archivos, una sola vez: soltarlos en el conversor es más rápido que preparar un entorno, y puedes comparar cada página con su Markdown.
- Documentos sensibles en un equipo compartido: el conversor del navegador no necesita instalación y mantiene el archivo en la pestaña.
- Quieres recuentos de tokens y fragmentos RAG sin programarlos tú: consulta PDF a Markdown para LLM.
Preguntas frecuentes
¿Qué biblioteca es la más rápida?
Con PDF de texto, MarkItDown y PyMuPDF4LLM tardan desde una fracción de segundo hasta unos segundos por documento en un portátil. Docling y Marker ejecutan modelos neuronales y son mucho más lentos sin GPU.
¿Cuál maneja mejor las tablas?
De las dos que medimos, PyMuPDF4LLM produjo tablas Markdown correctas y MarkItDown casi nunca. Docling y Marker usan modelos de tablas y se recomiendan a menudo para tablas complejas; pruébalos con tus propios documentos.
¿Puedo usarlas en un producto comercial?
MarkItDown y Docling son MIT, que lo permite. PyMuPDF necesita cumplir la AGPL o una licencia comercial. El código de Marker es Apache 2.0, pero los pesos de su modelo tienen límites de ingresos para el uso comercial.
¿Hay una opción en JavaScript?
pdftomd funciona en JavaScript y WebAssembly en el navegador. Su motor de texto es el paquete de código abierto @firecrawl/pdf-inspector-wasm, y su OCR es PaddleOCR sobre ONNX Runtime Web. Consulta la página de licencias para ver cada componente.