---
title: "pdf-inspector: Parser PDF local antes del OCR"
canonical: https://wavect.io/es/blog/pdf-inspector-ocr-routing/
language: es
description: "Análisis de pdf-inspector: convierte PDF a Markdown, detecta páginas escaneadas antes del OCR y evalúa benchmark, límites, coste y producción."
image: "https://wavect.io/img/blog/headers/header_pdf-inspector-ocr-routing.png"
---

[**Volver**](/es/blog/overview/)

[![Kevin Riedl](/img/team/kevin.webp)](/es/team/kevin-riedl/)

[Kevin Riedl](/es/team/kevin-riedl/) https://linkedin.com/in/wsdt

14 min de lectura · 6 ago 2026

[**Siguiente**](/es/blog/local-multimodal-ai-coding-assistant/)

# Análisis de pdf-inspector: procesa el PDF localmente antes de pagar OCR

Resumen

pdf-inspector es una biblioteca Rust con licencia MIT que clasifica PDF y extrae texto nativo como Markdown sin OCR. El benchmark de Firecrawl del 31 de julio de 2026 registra 0,470 segundos para 200 documentos en un Apple M4 Pro, pero el OCR estaba desactivado. Es una prueba de extracción directa, no de que un PDF escaneado termine en milisegundos. Úsalo como primera etapa de una canalización híbrida: valida y aísla la carga, extrae localmente el texto fiable, manda a OCR solo las páginas o regiones marcadas, conserva la procedencia por página y mide la calidad con tu propio corpus. Hay bindings para Node.js, Python, Rust y WebAssembly en el navegador.

**pdf-inspector es un parser PDF local y un router de OCR, no un motor OCR.** La biblioteca Rust de código abierto de Firecrawl clasifica un documento como textual, escaneado, basado en imágenes o mixto. Extrae el texto nativo aprovechable como Markdown y devuelve qué páginas todavía necesitan OCR. Esa diferencia crea el valor comercial: la ruta más lenta y cara deja de procesar páginas que ya contienen texto legible por máquina.

El post viral afirma 0,002 segundos por página. El repositorio contiene un benchmark potente, pero no esa promesa universal exacta. Este análisis separa el resultado medido del titular social, marca dónde termina el parsing nativo y ofrece un marco de decisión para ingesta RAG, extracción de facturas, búsqueda en contratos y flujos de agentes de IA.

## ¿Qué hace realmente pdf-inspector?

**Lee la estructura interna del PDF antes de renderizar una página o llamar a un modelo.** El detector busca operadores de texto e imagen en el árbol de páginas. Después, el extractor reconstruye texto con posiciones, tipografías, columnas, enlaces, listas, títulos y tablas. El resultado incluye confianza, señales de layout y la lista de páginas que necesitan OCR.

| Resultado | Ruta recomendada | Motivo |
| --- | --- | --- |
| TextBased con confianza alta | Extraer localmente a Markdown | El archivo ya tiene una capa de texto útil. El OCR añade latencia y puede introducir errores de reconocimiento. |
| Mixed | Extraer páginas nativas y aplicar OCR solo a páginas o regiones marcadas | Un documento puede mezclar informes exportados, firmas, anexos escaneados y páginas de imagen. |
| Scanned o ImageBased | Renderizar y enviar a una canalización OCR o de visión | No existe texto nativo fiable que recuperar. |
| Problemas de encoding o confianza baja | Usar OCR como fallback y validar | Puede haber operadores de texto aunque los caracteres decodificados sean basura. |

La biblioteca no incluye un modelo OCR. Es una decisión de diseño. El [README oficial de pdf-inspector](https://github.com/firecrawl/pdf-inspector) describe un parser Rust puro, sin modelos ML ni servicios externos. La canalización alojada [Fire-PDF de Firecrawl](https://www.firecrawl.dev/blog/fire-pdf-launch) es un producto más amplio: usa pdf-inspector para clasificar y extraer texto nativo, y luego aplica detección de layout y GLM-OCR a las regiones necesarias. No conviene evaluar uno como si fuera el otro.

## ¿Procesa de verdad 200 PDF en 0,470 segundos?

**Sí, en el benchmark publicado de extracción directa de Firecrawl. No, eso no significa que cada página de cualquier PDF termine en dos milisegundos.**

| Dato publicado | Qué significa | Qué no demuestra |
| --- | --- | --- |
| Corpus opendataloader-bench de 200 documentos | Un corpus compartido, procesado en secuencia dentro de un proceso | Que tus facturas, contratos, escaneos e idiomas se parezcan al corpus |
| 0,470 segundos en total | Un promedio simple de unos 2,35 milisegundos por documento | Dos milisegundos por página, latencia p95, subida u OCR |
| Apple M4 Pro, mediana de cinco ejecuciones | Máquina y método repetible documentados | La misma velocidad en navegador, contenedor, VM económica o arranque en frío |
| OCR desactivado | Comparación justa entre parsers locales sin modelo | Precisión o velocidad en páginas escaneadas |
| 0,875 global, 0,915 en orden de lectura y 0,814 en tablas | Resultados estructurales fuertes para la versión 0.2.6 en ese benchmark | Extracción perfecta o superioridad en cada tipo de documento |

Los resultados se actualizaron el 31 de julio de 2026. Comparan pdf-inspector 0.2.6 con LiteParse, OpenDataLoader, PyMuPDF4LLM y MarkItDown. El repositorio enlaza configuración y artefactos. La conclusión de compra responsable no es «el parser PDF más rápido en todo». Es «un candidato local prometedor para PDF con texto nativo que merece una prueba con nuestro corpus».

Firecrawl también indica que cerca del 54 por ciento de los PDF de su carga no necesitan OCR. Trátalo como una estimación del corpus del proveedor, no como una distribución universal. Ejecuta la clasificación sobre los documentos reales de los últimos 30 a 90 días antes de construir el caso económico.

## Arquitectura de producción: clasifica primero, escala después

1. **Acepta con seguridad:** impón límites de archivo y páginas, verifica la firma en vez de confiar en MIME, sustituye nombres controlados por el usuario y guarda fuera del webroot.
2. **Parsea de forma aislada:** limita CPU, memoria y tiempo. Todo PDF de proveedor, adjunto o carga pública es entrada no confiable.
3. **Clasifica una vez:** registra tipo, confianza, páginas, alertas de encoding, layout complejo y páginas para OCR.
4. **Usa la ruta barata:** convierte a Markdown el texto nativo de confianza alta sin llamada de red.
5. **Escala de forma estrecha:** renderiza solo páginas o regiones marcadas y envíalas al servicio OCR aprobado o al modelo local.
6. **Ensambla con procedencia:** conserva orden, página, versión del parser, ruta, confianza y correcciones humanas.
7. **Valida la salida:** comprueba páginas vacías, calidad de caracteres, tablas, totales, fechas, identificadores y campos obligatorios antes de indexar o actuar.

Valor estimado del routing = páginas OCR evitadas × coste marginal por página OCR, menos cómputo, ingeniería y corrección.

Mantén los documentos fallidos en el denominador. Nuestro marco de [coste por acción de un agente de IA](/es/blog/ai-agent-cost-per-action-2026/) explica por qué una extracción barata que exige reparación humana no cuenta como acción exitosa. Si el Markdown va a un índice, continúa con la [checklist de RAG listo para producción en la UE](/es/blog/rag-production-readiness-checklist-eu/). Esa guía cubre retrieval, permisos, evaluación y citas. Esta cubre la ruta del PDF antes del chunking.

## ¿Node.js, Python, Rust o WebAssembly en el navegador?

| Binding | Mejor uso | Cuidado en producción |
| --- | --- | --- |
| Node.js o Bun | Servicios API, colas y productos TypeScript | Los binarios precompilados cubren plataformas listadas. Verifica tu arquitectura y mantén la dependencia actualizada. |
| Python | Ingeniería de datos, evaluación e ingesta RAG | Distintas APIs devuelven páginas con índice cero o uno. Normaliza la numeración en el límite del sistema. |
| Rust o CLI | Servicios de alto rendimiento y procesos batch controlados | Te corresponden aislamiento, límites, observabilidad y upgrades. |
| WebAssembly | Conversión privada local y preflight antes de subir | La extracción es síncrona tras inicializar. Usa un Web Worker con archivos grandes. |

La [documentación oficial de WebAssembly](https://github.com/firecrawl/pdf-inspector/blob/main/wasm/README.md) dice que los bytes permanecen en local, el build usa un solo hilo, los CMaps van embebidos y los documentos solo de imagen siguen necesitando OCR. La versión de navegador sirve como preflight privado, pero no convierte el navegador en una plataforma completa de inteligencia documental.

```
const result = classifyPdf(pdfBuffer)

if (result.pdfType === "TextBased" && result.confidence >= 0.9) {
  return processPdf(pdfBuffer).markdown
}

const native = processPdf(pdfBuffer).markdown
const scanned = await ocrOnly(pdfBuffer, result.pagesNeedingOcr)
return mergeByPage(native, scanned)
```

`ocrOnly` y `mergeByPage` son código de tu aplicación, no APIs de pdf-inspector. Tampoco debes adoptar 0,9 como umbral por intuición. Ajusta primero contra falsos negativos, sobre todo páginas que aparentan tener texto pero se decodifican mal. En facturas o contratos, una sola página omitida puede costar más que miles de llamadas OCR evitadas.

## Cuándo encaja mal pdf-inspector

- **Escaneos, escritura a mano y fotos:** puede dirigirlos, pero no leerlos sin otro componente OCR o de visión.
- **Semántica visual no codificada como texto:** diagramas, casillas, firmas, sellos y relaciones espaciales pueden requerir modelos de layout o visión.
- **Reconstrucción perfecta:** títulos y tablas se infieren desde fuentes, operaciones de dibujo y alineación. Las heurísticas fallan.
- **Cargas públicas sin límites:** Rust reduce ciertos riesgos de memoria, pero sigue haciendo falta aislar, limitar y actualizar. La [política de seguridad](https://github.com/firecrawl/pdf-inspector/blob/main/SECURITY.md) incluye PDF manipulados y denegación de servicio.
- **Cero operaciones:** una biblioteca abierta da control, no un SLA, una cola de revisión o recuperación automática.

La [guía de carga de archivos de OWASP](https://cheatsheetseries.owasp.org/cheatsheets/File_Upload_Cheat_Sheet.html) recomienda defensa en profundidad: tipos permitidos, firma, límites, almacenamiento separado, parsers actualizados, análisis y sandboxing. El proceso local puede reducir transferencias. No vuelve confiable un PDF ajeno.

## ¿Construir, comprar o usar una canalización híbrida?

| Opción | Elígela cuando | Responsabilidad propia |
| --- | --- | --- |
| Integrar pdf-inspector | La mayoría de archivos tiene texto nativo, importa la privacidad y el equipo puede operar la canalización | Routing, OCR, seguridad, controles de calidad y upgrades |
| Comprar un parser completo gestionado | Los documentos son impredecibles, dominan escaneos y layouts complejos, y prima salir rápido | Evaluar proveedor, condiciones de datos, fallback y aceptación |
| Local más OCR gestionado | Quieres rutina local y precisión especializada solo para excepciones | Dos rutas de datos, unión por página, observabilidad y costes |
| Mantener el parser actual | La extracción ya es precisa, barata y operativamente aburrida | Demostrar valor material antes de financiar una reescritura |

## Evaluación de diez días antes de comprometerte

1. **Muestrea la realidad:** reúne al menos 200 PDF representativos por idiomas, fuentes, páginas y fallos. Separa archivos hostiles y malformados.
2. **Etiqueta la ruta:** marca qué páginas tienen texto fiable, necesitan OCR, layout avanzado o rechazo.
3. **Mide la línea base:** calidad, p50, p95, páginas OCR, minutos de corrección y coste por documento aceptado.
4. **Ejecuta pdf-inspector:** fija versión y máquina. Mide primero recall del routing, después estructura Markdown y rendimiento total.
5. **Calcula excepciones:** páginas OCR evitadas, ingeniería adicional, reparación humana y coste de un escaneo omitido.
6. **Ataca el límite:** prueba PDF grandes, cifrados, rotos, engañosos e intensivos dentro de un entorno aislado.
7. **Decide con un gate:** solo despliega si mejora coste o latencia sin romper umbrales de extracción y seguridad.

Si se convierte en infraestructura de producto, nuestro [servicio de AI enablement](/es/services/ai-enablement/) puede medir el corpus, construir el router y añadir evaluación. [Twinsoft AI](/es/case-studies/twinsoft-ai/) muestra el mismo principio en producción: controles de calidad y evidencia trazable alrededor del output del modelo. La [guía para elegir tecnología de un MVP](/es/software-development-guide/how-to-choose-a-tech-stack-for-mvp/) ayuda a decidir qué capas poseer y cuáles comprar antes de que la arquitectura se endurezca.

## Preguntas frecuentes

### ¿pdf-inspector es un motor OCR?

No. Clasifica PDF y extrae texto nativo sin un modelo OCR. Las páginas escaneadas, de imagen, con confianza baja o encoding roto siguen necesitando una etapa OCR o de visión.

### ¿pdf-inspector es realmente el parser PDF más rápido?

Fue la ejecución completa más rápida en la comparación de Firecrawl del 31 de julio de 2026 entre cinco parsers locales sin modelo sobre 200 documentos. El benchmark usó un Apple M4 Pro y desactivó OCR. Reprodúcelo con tu corpus antes de generalizar.

### ¿Puede ejecutarse por completo en el navegador?

Sí. El paquete WebAssembly clasifica y extrae localmente desde un Uint8Array. La documentación oficial indica que los bytes no se suben. La extracción es síncrona, por lo que los archivos grandes deben ir a un Web Worker. Los PDF de imagen todavía necesitan OCR.

### ¿Cuánto coste OCR puede ahorrar el routing?

Depende de cuántas páginas tengan texto nativo fiable. Cuenta las páginas OCR evitadas en tu corpus, multiplícalas por el coste marginal y resta cómputo, ingeniería, monitorización y corrección. El 54 por ciento de Firecrawl describe su carga, no la tuya.

### ¿Debo usar pdf-inspector en RAG?

Es un buen candidato para la puerta de ingesta antes del chunking cuando muchos PDF contienen texto nativo. Conserva procedencia por página, manda escaneos a OCR, valida estructura y prueba por separado retrieval, permisos y citas.

## Fuentes primarias y fecha del benchmark

- [Repositorio y benchmark de Firecrawl pdf-inspector](https://github.com/firecrawl/pdf-inspector), actualizado el 31 de julio de 2026.
- [Documentación oficial para Node.js y Bun](https://github.com/firecrawl/pdf-inspector/blob/main/napi/README.md).
- [Documentación oficial para Python](https://github.com/firecrawl/pdf-inspector/blob/main/docs/python.md).
- [Documentación oficial de WebAssembly](https://github.com/firecrawl/pdf-inspector/blob/main/wasm/README.md).
- [Anuncio de la arquitectura Fire-PDF](https://www.firecrawl.dev/blog/fire-pdf-launch).
- [OWASP File Upload Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/File_Upload_Cheat_Sheet.html).

## Reflexiones finales

pdf-inspector interesa porque coloca una decisión barata antes de una operación cara. El benchmark publicado lo convierte en un candidato creíble para extraer PDF con texto nativo. El routing por página crea valor sobre corpus mixtos. La limitación es parte de la misma conclusión: no realiza OCR y los 0,470 segundos no describen el procesamiento de escaneos.

Úsalo como router, no como milagro. Fija versión, aísla archivos no confiables, prueba tus propios documentos, envía a OCR solo las páginas dudosas y juzga por documentos aceptados, tiempo de corrección y coste total. Así se convierte un titular viral en arquitectura de producción.

## También te puede gustar..

[**Checklist de RAG listo para producción en la UE** Los controles de retrieval, permisos, evaluación y citas que empiezan después de extraer el PDF.](/es/blog/rag-production-readiness-checklist-eu/) [**AI enablement frente a consultoría de IA genérica** Compara un sistema funcional en tu infraestructura con un encargo centrado en estrategia.](/es/compare/ai-enablement-vs-generic-ai-consultancy/)

Modelos e infraestructura

## Continúa por este clúster

[Empieza por el artículo fundamental**Alojar LLMs en la UE: Cuándo Salen a Cuenta los Open Weights**](/es/blog/self-hosting-llms-eu-cost/)

- [Asistente de programación con IA local multimodal: voz, OCR y privacidad](/es/blog/local-multimodal-ai-coding-assistant/)
- [DeepSeek V4 Flash 0731 en un PC de IA: ¿qué funciona?](/es/blog/deepseek-v4-flash-0731-local-ai-pc/)
- [Cómo afinar Gemma 4 gratis con Unsloth y Colab](/es/blog/fine-tune-gemma-4-free-unsloth-colab/)
- [Taalas HC1 a examen: ¿compensa un ASIC para un solo LLM?](/es/blog/taalas-hc1-llm-asic-review/)
- [¿Qué LLM local puedes ejecutar? Guía de llmfit para tu hardware](/es/blog/llmfit-local-llm-hardware-guide/)

Tu bandeja, sin ruido

## Sigue el trabajo que te importa

Recibe un correo breve cuando publiquemos algo nuevo. Sigue todo el blog o solo los temas que te interesan.

[**Volver**](/es/blog/overview/)

[![Kevin Riedl](/img/team/kevin.webp)](/es/team/kevin-riedl/)

[Kevin Riedl](/es/team/kevin-riedl/) https://linkedin.com/in/wsdt

14 min de lectura · 6 ago 2026

[**Siguiente**](/es/blog/local-multimodal-ai-coding-assistant/)

Nuevos artículos por correo ×

×

Recibe nuevos artículos por correo

Un correo breve cuando publicamos. Gratis y sin seguimiento.

## Structured Data

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/#organization",
      "@type": [
        "Organization",
        "ProfessionalService",
        "LocalBusiness"
      ],
      "employee": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "founder": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "legalRepresentative": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "name": "Wavect GmbH",
      "subjectOf": {
        "@id": "https://wavect.io/verified-claims.json#dataset",
        "@type": "Dataset",
        "name": "Wavect verified publication claims",
        "url": "https://wavect.io/verified-claims.json"
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/team/kevin-riedl/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Kevin Riedl",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796365",
        "https://www.linkedin.com/in/wsdt",
        "https://github.com/wsdt"
      ],
      "url": "https://wavect.io/team/kevin-riedl/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/team/christof-jori/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Christof Jori",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796367",
        "https://www.linkedin.com/in/jocr77/",
        "https://github.com/jo-chris"
      ],
      "url": "https://wavect.io/team/christof-jori/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/#website",
      "@type": "WebSite",
      "inLanguage": [
        "en",
        "de",
        "es",
        "zh"
      ],
      "name": "Wavect",
      "potentialAction": {
        "@type": "SearchAction",
        "query-input": "required name=search_term_string",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "https://wavect.io/search/?q={search_term_string}"
        }
      },
      "publisher": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/es/blog/pdf-inspector-ocr-routing/#webpage",
      "@type": "WebPage",
      "dateModified": "2026-08-06",
      "inLanguage": "es",
      "isPartOf": {
        "@id": "https://wavect.io/#website",
        "@type": "WebSite"
      },
      "lastReviewed": "2026-08-06",
      "url": "https://wavect.io/es/blog/pdf-inspector-ocr-routing/"
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "abstract": "pdf-inspector es una biblioteca Rust con licencia MIT que clasifica PDF y extrae texto nativo como Markdown sin OCR. El benchmark de Firecrawl del 31 de julio de 2026 registra 0,470 segundos para 200 documentos en un Apple M4 Pro, pero el OCR estaba desactivado. Es una prueba de extracción directa, no de que un PDF escaneado termine en milisegundos. Úsalo como primera etapa de una canalización híbrida: valida y aísla la carga, extrae localmente el texto fiable, manda a OCR solo las páginas o regiones marcadas, conserva la procedencia por página y mide la calidad con tu propio corpus. Hay bindings para Node.js, Python, Rust y WebAssembly en el navegador.",
  "articleBody": " Resumen del blog/IA y agentes/Modelos e infraestructura Análisis de pdf-inspector: procesa el PDF localmente antes de pagar OCR Resumen pdf-inspector es una biblioteca Rust con licencia MIT que clasifica PDF y extrae texto nativo como Markdown sin OCR. El benchmark de Firecrawl del 31 de julio de 2026 registra 0,470 segundos para 200 documentos en un Apple M4 Pro, pero el OCR estaba desactivado. Es una prueba de extracción directa, no de que un PDF escaneado termine en milisegundos. Úsalo como primera etapa de una canalización híbrida: valida y aísla la carga, extrae localmente el texto fiable, manda a OCR solo las páginas o regiones marcadas, conserva la procedencia por página y mide la calidad con tu propio corpus. Hay bindings para Node.js, Python, Rust y WebAssembly en el navegador. pdf-inspector es un parser PDF local y un router de OCR, no un motor OCR. La biblioteca Rust de código abierto de Firecrawl clasifica un documento como textual, escaneado, basado en imágenes o mixto. Extrae el texto nativo aprovechable como Markdown y devuelve qué páginas todavía necesitan OCR. Esa diferencia crea el valor comercial: la ruta más lenta y cara deja de procesar páginas que ya contienen texto legible por máquina. El post viral afirma 0,002 segundos por página. El repositorio contiene un benchmark potente, pero no esa promesa universal exacta. Este análisis separa el resultado medido del titular social, marca dónde termina el parsing nativo y ofrece un marco de decisión para ingesta RAG, extracción de facturas, búsqueda en contratos y flujos de agentes de IA. ¿Qué hace realmente pdf-inspector? Lee la estructura interna del PDF antes de renderizar una página o llamar a un modelo. El detector busca operadores de texto e imagen en el árbol de páginas. Después, el extractor reconstruye texto con posiciones, tipografías, columnas, enlaces, listas, títulos y tablas. El resultado incluye confianza, señales de layout y la lista de páginas que necesitan OCR. ResultadoRuta recomendadaMotivo TextBased con confianza altaExtraer localmente a MarkdownEl archivo ya tiene una capa de texto útil. El OCR añade latencia y puede introducir errores de reconocimiento. MixedExtraer páginas nativas y aplicar OCR solo a páginas o regiones marcadasUn documento puede mezclar informes exportados, firmas, anexos escaneados y páginas de imagen. Scanned o ImageBasedRenderizar y enviar a una canalización OCR o de visiónNo existe texto nativo fiable que recuperar. Problemas de encoding o confianza bajaUsar OCR como fallback y validarPuede haber operadores de texto aunque los caracteres decodificados sean basura. La biblioteca no incluye un modelo OCR. Es una decisión de diseño. El README oficial de pdf-inspector describe un parser Rust puro, sin modelos ML ni servicios externos. La canalización alojada Fire-PDF de Firecrawl es un producto más amplio: usa pdf-inspector para clasificar y extraer texto nativo, y luego aplica detección de layout y GLM-OCR a las regiones necesarias. No conviene evaluar uno como si fuera el otro. ¿Procesa de verdad 200 PDF en 0,470 segundos? Sí, en el benchmark publicado de extracción directa de Firecrawl. No, eso no significa que cada página de cualquier PDF termine en dos milisegundos. Dato publicadoQué significaQué no demuestra Corpus opendataloader-bench de 200 documentosUn corpus compartido, procesado en secuencia dentro de un procesoQue tus facturas, contratos, escaneos e idiomas se parezcan al corpus 0,470 segundos en totalUn promedio simple de unos 2,35 milisegundos por documentoDos milisegundos por página, latencia p95, subida u OCR Apple M4 Pro, mediana de cinco ejecucionesMáquina y método repetible documentadosLa misma velocidad en navegador, contenedor, VM económica o arranque en frío OCR desactivadoComparación justa entre parsers locales sin modeloPrecisión o velocidad en páginas escaneadas 0,875 global, 0,915 en orden de lectura y 0,814 en tablasResultados estructurales fuertes para la versión 0.2.6 en ese benchmarkExtracción perfecta o superioridad en cada tipo de documento Los resultados se actualizaron el 31 de julio de 2026. Comparan pdf-inspector 0.2.6 con LiteParse, OpenDataLoader, PyMuPDF4LLM y MarkItDown. El repositorio enlaza configuración y artefactos. La conclusión de compra responsable no es «el parser PDF más rápido en todo». Es «un candidato local prometedor para PDF con texto nativo que merece una prueba con nuestro corpus». Firecrawl también indica que cerca del 54 por ciento de los PDF de su carga no necesitan OCR. Trátalo como una estimación del corpus del proveedor, no como una distribución universal. Ejecuta la clasificación sobre los documentos reales de los últimos 30 a 90 días antes de construir el caso económico. Arquitectura de producción: clasifica primero, escala después Acepta con seguridad: impón límites de archivo y páginas, verifica la firma en vez de confiar en MIME, sustituye nombres controlados por el usuario y guarda fuera del webroot. Parsea de forma aislada: limita",
  "articleSection": "Ingeniería",
  "author": {
    "@id": "https://wavect.io/team/kevin-riedl/#person",
    "@type": "Person",
    "name": "Kevin Riedl",
    "sameAs": [
      "https://www.wikidata.org/wiki/Q139796365",
      "https://www.linkedin.com/in/wsdt",
      "https://github.com/wsdt"
    ],
    "url": "https://wavect.io/team/kevin-riedl/"
  },
  "dateModified": "2026-08-06",
  "datePublished": "2026-08-06",
  "description": "pdf-inspector es una biblioteca Rust con licencia MIT que clasifica PDF y extrae texto nativo como Markdown sin OCR. El benchmark de Firecrawl del 31 de julio de 2026 registra 0,470 segundos para 200 documentos en un Apple M4 Pro, pero el OCR estaba desactivado. Es una prueba de extracción directa, no de que un PDF escaneado termine en milisegundos. Úsalo como primera etapa de una canalización híbrida: valida y aísla la carga, extrae localmente el texto fiable, manda a OCR solo las páginas o regiones marcadas, conserva la procedencia por página y mide la calidad con tu propio corpus. Hay bindings para Node.js, Python, Rust y WebAssembly en el navegador.",
  "headline": "pdf-inspector: parser PDF local antes del OCR",
  "image": "https://wavect.io/img/blog/headers/header_pdf-inspector-ocr-routing.svg",
  "inLanguage": "es",
  "keywords": "Parsing de PDF, Enrutamiento OCR",
  "mainEntityOfPage": {
    "@id": "https://wavect.io/es/blog/pdf-inspector-ocr-routing/",
    "@type": "WebPage"
  },
  "publisher": {
    "@id": "https://wavect.io/#organization",
    "@type": [
      "Organization",
      "ProfessionalService",
      "LocalBusiness"
    ]
  },
  "url": "https://wavect.io/es/blog/pdf-inspector-ocr-routing/",
  "wordCount": 2289
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "item": "https://wavect.io/es/",
      "name": "Inicio",
      "position": 1
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/es/blog/overview/",
      "name": "Blog",
      "position": 2
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/es/blog/pdf-inspector-ocr-routing/",
      "name": "pdf-inspector: parser PDF local antes del OCR",
      "position": 3
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "item": "https://wavect.io/es/",
      "name": "Inicio",
      "position": 1
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/es/blog/overview/",
      "name": "Resumen del blog",
      "position": 2
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/es/blog/topics/ai-agents/",
      "name": "IA y agentes",
      "position": 3
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/es/blog/clusters/models-infrastructure/",
      "name": "Modelos e infraestructura",
      "position": 4
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/es/blog/pdf-inspector-ocr-routing/",
      "name": "pdf-inspector: Parser PDF local antes del OCR | ",
      "position": 5
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "No. Clasifica PDF y extrae texto nativo sin un modelo OCR. Las páginas escaneadas, de imagen, con confianza baja o encoding roto siguen necesitando una etapa OCR o de visión."
      },
      "name": "¿pdf-inspector es un motor OCR?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Fue la ejecución completa más rápida en la comparación de Firecrawl del 31 de julio de 2026 entre cinco parsers locales sin modelo sobre 200 documentos. El benchmark usó un Apple M4 Pro y desactivó OCR. Reprodúcelo con tu corpus antes de generalizar."
      },
      "name": "¿pdf-inspector es realmente el parser PDF más rápido?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Sí. El paquete WebAssembly clasifica y extrae localmente desde un Uint8Array. La documentación oficial indica que los bytes no se suben. La extracción es síncrona, por lo que los archivos grandes deben ir a un Web Worker. Los PDF de imagen todavía necesitan OCR."
      },
      "name": "¿Puede ejecutarse por completo en el navegador?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Depende de cuántas páginas tengan texto nativo fiable. Cuenta las páginas OCR evitadas en tu corpus, multiplícalas por el coste marginal y resta cómputo, ingeniería, monitorización y corrección. El 54 por ciento de Firecrawl describe su carga, no la tuya."
      },
      "name": "¿Cuánto coste OCR puede ahorrar el routing?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Es un buen candidato para la puerta de ingesta antes del chunking cuando muchos PDF contienen texto nativo. Conserva procedencia por página, manda escaneos a OCR, valida estructura y prueba por separado retrieval, permisos y citas."
      },
      "name": "¿Debo usar pdf-inspector en RAG?"
    }
  ]
}
```
