Documentación Técnica Completa de Docling
- Docling es un motor 100% gratuito (MIT) que procesa PDFs, DOCX, PPTX, XLSX, imágenes escaneadas y audio en Markdown, HTML y JSON estructurados.
- Incluye análisis visual de diseño, recuperación del orden de lectura y el modelo TableFormer v2 para tablas complejas.
- Soporta OCR multilingüe mediante RapidOCR, Tesseract (tesserocr), EasyOCR y OcrMac.
- Se ejecuta 100% en local con cero telemetría, compatible con servidores aislados (air-gapped), API REST (docling-serve) y servidor MCP (docling-mcp).
1. Visión General y Arquitectura
Docling es un motor de código abierto para la conversión de documentos desarrollado por IBM Research y alojado en LF AI & Data. A diferencia de extractores básicos de texto, Docling procesa documentos mediante pipelines modulares que analizan la geometría de la página, detectan cuadros delimitadores (bounding boxes), extraen tablas fusionadas y ordenan el flujo de lectura para LLMs y RAG.
2. Instalación y Configuración del Entorno
Docling se instala en Python 3.9 a 3.14 (64 bits) en Windows, macOS y Linux mediante pip o uv:
2.1 Configuración en Windows 10/11 y Microsoft Visual C++
En Windows se requiere Python de 64 bits. Al compilar extensiones de C++ como tesserocr, es necesario contar con Microsoft Visual C++ 14.0+:
Alternativa recomendada (Sin compilador C++): Utilice Astral uv para instalar binarios precompilados:
3. Guía de Inicio Rápido
from docling.document_converter import DocumentConverter
converter = DocumentConverter()
result = converter.convert("https://arxiv.org/pdf/2408.09869")
print(result.document.export_to_markdown()[:500])
4. El Modelo de Representación DoclingDocument
El modelo principal DoclingDocument mantiene un árbol orientado a objetos de secciones, tablas, fragmentos de código y figuras con coordenadas espaciales exactas, exportable mediante result.document.export_to_json().
5. Pipelines de Procesamiento y Granite Docling VLM
5.1 Configuración de Granite Docling VLM
from docling.datamodel.base_models import InputFormat
from docling.datamodel.pipeline_options import VlmPipelineOptions
from docling.document_converter import DocumentConverter, PdfFormatOption
vlm_options = VlmPipelineOptions()
vlm_options.vlm_model = "granite_docling"
converter = DocumentConverter(
format_options={InputFormat.PDF: PdfFormatOption(pipeline_options=vlm_options)}
)
result = converter.convert("documento.pdf")
6. Motores OCR y Ajuste de Rendimiento
6.1 Desactivar OCR para PDFs Digitales (10x más rápido)
En documentos con capa de texto digital, desactive el OCR mediante pipeline_options.do_ocr = False para multiplicar la velocidad de procesamiento:
from docling.datamodel.base_models import InputFormat
from docling.datamodel.pipeline_options import PdfPipelineOptions
from docling.document_converter import DocumentConverter, PdfFormatOption
pipeline_options = PdfPipelineOptions()
pipeline_options.do_ocr = False # 10x más rápido para PDFs digitales
converter = DocumentConverter(
format_options={InputFormat.PDF: PdfFormatOption(pipeline_options=pipeline_options)}
)
result = converter.convert("informe.pdf")
7. Extracción Multiformato (Excel XLSX, PowerPoint PPTX, CAD y Audio)
Docling procesa hojas de cálculo multi-hoja de Excel (.xlsx), presentaciones de PowerPoint (.pptx) y diagramas técnicos con la misma API:
from docling.document_converter import DocumentConverter
converter = DocumentConverter()
excel_res = converter.convert("financiero.xlsx")
print(excel_res.document.export_to_markdown())
8. Segmentación RAG con `HybridChunker`
from docling.document_converter import DocumentConverter
from docling.chunking import HybridChunker
converter = DocumentConverter()
result = converter.convert("articulo.pdf")
chunker = HybridChunker(max_tokens=512, merge_peers=True)
for chunk in chunker.chunk(result.document):
print(chunk.meta.headings, chunk.text[:80])
9. Aceleración GPU y Procesamiento por Lotes
from docling.datamodel.accelerator_options import AcceleratorDevice, AcceleratorOptions
from docling.datamodel.pipeline_options import ThreadedPdfPipelineOptions
accel = AcceleratorOptions(device=AcceleratorDevice.CUDA)
pipe_opts = ThreadedPdfPipelineOptions(accelerator_options=accel, page_batch_size=8)
10. Integraciones con Frameworks (LangChain y LlamaIndex)
from langchain_docling import DoclingLoader
loader = DoclingLoader(file_path="informe.pdf")
docs = loader.load()
11. Catálogo de Modelos VLM
| Modelo | Proveedor | Uso Principal | Argumento CLI |
|---|---|---|---|
| granite_docling | IBM Research | Extracción visual de PDFs de alta precisión | --vlm-model granite_docling |
| smoldocling | Hugging Face / IBM | VLM ligero y rápido para CPU | --vlm-model smoldocling |
12. Servidor FastAPI (`docling-serve`) y Servidor MCP
12.1 Integración MCP para Claude Desktop
{
"mcpServers": {
"docling": {
"command": "uvx",
"args": ["--from=docling-mcp", "docling-mcp-server"]
}
}
}
13. Seguridad Empresarial y Despliegue Air-Gapped
Docling funciona 100% en local sin telemetría. Para entornos sin conexión a internet:
export DOCLING_CACHE_DIR="/opt/docling_models"
docling-tools models download --all
export HF_HUB_OFFLINE=1
export DOCLING_CACHE_DIR="/opt/docling_models"
docling document.pdf --to md
14. Diagnóstico y Solución de Problemas
| Error / Problema | Causa | Solución |
|---|---|---|
| cannot import name 'BoundingBox' | Migración del esquema en Docling v2. | Importe desde from docling_core.types.doc import BoundingBox. |
| RapidOCR text detection result empty | Baja resolución de imagen en escaneo. | Configure pipeline_options.images_scale = 2.0 para aumentar DPI. |
| Verificar versión instalada | Comprobación de CLI / Python. | Ejecute docling --version en la terminal. |
15. Referencia Completa de Parámetros CLI
| Parámetro | Tipo | Valor por Defecto | Descripción |
|---|---|---|---|
| --to | md, json, html, doctags | md | Formato de exportación del documento. |
| --no-ocr | Bandera Booleana | - | Desactiva el OCR para acelerar la conversión de PDFs digitales. |
| --version | Bandera | - | Muestra la versión de Docling instalada. |