Script en Python para convertir documentos PDF a Markdown, intentando conservar el texto y la estructura original lo mejor posible.
Está pensado sobre todo para manuales técnicos, documentos oficiales y PDFs con comandos de consola, cabeceras repetidas, índices o partes escaneadas.
- Extrae texto con PyMuPDF.
- Usa OCR cuando detecta bloques de imagen o texto mal extraído.
- Elimina cabeceras y pies repetidos.
- Limpia ruido de firmas digitales y certificados en las primeras páginas.
- Intenta reparar títulos y numeraciones partidas.
- Detecta bloques de comandos y los guarda como
bash. - Permite usar Marker de forma opcional para comparar resultados o rescatar tablas.
- Python 3
- PyMuPDF
- Tesseract OCR, si el PDF necesita OCR
Instalación básica:
pip install pymupdfPara OCR con Python:
pip install pytesseract PillowEn Debian/Ubuntu:
sudo apt update
sudo apt install tesseract-ocr tesseract-ocr-spa tesseract-ocr-engpython3 pdf_to_md_lossless_v13.py entrada.pdf salida.mdEjemplo:
python3 pdf_to_md_lossless_v13.py manual.pdf manual.mdPor defecto, el script añade información de conversión al inicio del archivo y separa el contenido por páginas.
Para generar un Markdown más limpio:
python3 pdf_to_md_lossless_v13.py entrada.pdf salida.md \
--plain-text \
--fix-joins \
--normalize-quotes \
--drop-nonprintablesPara quitar la cabecera técnica y los separadores de página:
python3 pdf_to_md_lossless_v13.py entrada.pdf salida.md \
--plain-text \
--no-conversion-header \
--no-page-markersSi el documento es principalmente una imagen o tiene poco texto extraíble:
python3 pdf_to_md_lossless_v13.py escaneado.pdf salida.md \
--enable-fullpage-ocr-fallback \
--ocr-lang spa \
--ocr-dpi 400Por defecto se usa spa+eng y 300 DPI.
| Opción | Descripción |
|---|---|
--plain-text |
No mete el texto normal dentro de bloques de código. |
--no-conversion-header |
No añade metadatos de conversión al principio. |
--no-page-markers |
No separa el resultado por páginas. |
--fix-joins |
Corrige algunas uniones habituales en comandos. |
--normalize-quotes |
Sustituye comillas tipográficas por comillas normales. |
--drop-nonprintables |
Elimina caracteres no imprimibles. |
--dehyphenate |
Intenta unir palabras partidas entre líneas. |
--keep-running-headers |
Conserva cabeceras y pies repetidos. |
--keep-legal-signature-noise |
Conserva el contenido relacionado con firmas y certificados. |
--enable-fullpage-ocr-fallback |
Activa OCR de toda la página como último recurso. |
--ocr-lang spa |
Indica el idioma de Tesseract. |
--ocr-dpi 400 |
Aumenta la resolución usada para OCR. |
--debug-extraction |
Añade información de depuración al Markdown. |
Consulta todas las opciones:
python3 pdf_to_md_lossless_v13.py --helpMarker es opcional. Puede servir para comparar resultados o intentar rescatar tablas.
Instalación:
pip install marker-pdfGenerar una conversión adicional con Marker:
python3 pdf_to_md_lossless_v13.py entrada.pdf salida.md \
--marker-compareRescatar tablas:
python3 pdf_to_md_lossless_v13.py entrada.pdf salida.md \
--marker-table-rescueAñadir las tablas rescatadas al final del archivo principal:
python3 pdf_to_md_lossless_v13.py entrada.pdf salida.md \
--append-marker-table-rescue- El resultado puede necesitar revisión manual en documentos con varias columnas, tablas complejas o diseños poco convencionales.
- La calidad del OCR depende del escaneo original.
- Las imágenes y figuras no se exportan.
- Marker no es necesario para usar el script.