pdf-inspector
Para detectar si un PDF es texto, escaneado, imagen o mixto y extraer su contenido sin lanzar OCR innecesario.
Librería en Rust que clasifica PDFs y extrae su texto a Markdown de forma muy rápida, con bindings para Python y Node.js.
Notas y contexto
Qué es
pdf-inspector es una librería open source de Firecrawl escrita en Rust para inspeccionar y procesar PDFs. Su función principal es clasificar un documento como basado en texto, escaneado, basado en imágenes o mixto muestreando sus flujos de contenido, y a partir de ahí extraer el texto con su posición y convertirlo a Markdown. Se distribuye como crate de Rust y ofrece bindings para Python (vía PyO3) y Node.js (vía napi-rs). Se publica bajo licencia MIT.
Para qué sirve
- Decidir si un PDF necesita OCR o no antes de procesarlo, evitando trabajo costoso e innecesario.
- Extraer texto de PDFs conservando la posición, la información de fuentes y las coordenadas.
- Convertir un PDF a Markdown con cabeceras, listas, tablas, código y formato de negrita o cursiva.
- Integrar la inspección de documentos en pipelines de scraping o ingestión que usan Python o Node.js.
Cuándo usarlo
Encaja cuando procesas grandes volúmenes de PDFs y quieres enrutar de forma inteligente: aplicar extracción directa a los documentos de texto y reservar el OCR solo para los escaneados. La clasificación de un documento ronda los 10-50 ms, así que es adecuada para casos donde el rendimiento importa. Si solo necesitas leer texto de PDFs sencillos en Python sin clasificación, alternativas como pdfplumber o PyMuPDF pueden bastar; pdf-inspector destaca cuando el routing y la velocidad son críticos.
Ejemplo
Uso como crate de Rust:
cargo add pdf-inspector
use pdf_inspector::process_pdf;
let result = process_pdf("documento.pdf")?;
println!("Tipo: {:?}", result.pdf_type);
if let Some(markdown) = &result.markdown {
println!("{}", markdown);
}
Uso desde Node.js con el paquete @firecrawl/pdf-inspector:
npm install @firecrawl/pdf-inspector
import { processPdf } from '@firecrawl/pdf-inspector';
import { readFileSync } from 'fs';
const result = processPdf(readFileSync('documento.pdf'));
console.log(result.pdfType); // "TextBased", "Scanned", "ImageBased", "Mixed"
console.log(result.markdown); // cadena Markdown o null
Puntos clave
- Clasifica un PDF como texto, escaneado, imagen o mixto en milisegundos muestreando los flujos de contenido.
- Extracción de texto consciente de la posición, con detección de columnas múltiples y orden de lectura.
- Detección de tablas mediante enfoques basados en rectángulos y heurísticas, con salida a Markdown.
- Soporte de fuentes CID (UTF-16BE, UTF-8, Latin-1) y arquitectura ligera en Rust puro con pocas dependencias.
Ten en cuenta
Es un proyecto joven; conviene revisar la versión publicada en crates.io y npm antes de fijarla en producción. pdf-inspector clasifica y extrae texto, pero no realiza OCR por sí mismo: para PDFs escaneados sigues necesitando un motor de OCR aparte (la librería precisamente te ayuda a decidir cuándo lanzarlo). Los bindings de Python se generan con maturin, por lo que su instalación requiere el toolchain de Rust.