Conversión Avanzada PDF a JSON: Técnicas y Automatización
Una vez dominaste la conversión básica PDF a JSON, es hora de aprender técnicas avanzadas para casos complejos y automatización a escala.
PDFs Complejos: Estrategias Avanzadas
Tablas Anidadas y Jerarquizadas
Algunos PDFs contienen tablas dentro de tablas o estructuras jerárquicas:
{
"table": {
"headers": ["Categoria", "Items"],
"rows": [
{
"category": "Ventas Q1",
"subtable": {
"items": [
{"producto": "A", "monto": 1000},
{"producto": "B", "monto": 2000}
]
}
}
]
}
}
Solución: Configura extracción recursiva para detectar estructuras anidadas.
OCR y Texto Escaneado
PDFs escaneados (imágenes) requieren OCR:
- Calidad: 300+ DPI - Mejor reconocimiento
- Lenguaje: Especifica idiomas esperados
- Post-procesamiento: Corrige errores comunes de OCR
// Corregir errores OCR comunes
const fixOCR = (text) => {
return text
.replace(/[0O]+/g, '0') // O confundida con 0
.replace(/[Il1]+/g, 'l') // Números con letras
.replace(/\s+/g, ' '); // Espacios múltiples
};
Expresiones Regulares para Extracción
Extrae campos específicos usando patrones:
// Extraer email de PDF
const emails = /[\w\.-]+@[\w\.-]+\.\w+/g;
// Extraer números de teléfono
const phones = /\+?[\d\s\-()]{10,}/g;
// Extraer fechas (DD/MM/YYYY)
const dates = /(\d{2})\/(\d{2})\/(\d{4})/g;
Automatización a Escala
Procesar Cientos de PDFs
Para flujos de producción:
#!/bin/bash
# Procesar PDFs en carpeta
for pdf in *.pdf; do
echo "Procesando $pdf..."
curl -X POST -F "file=@$pdf" \
https://files-to.com/api/pdf/to-json \
> "${pdf%.pdf}.json"
done
Integración con Python
import requests
import json
import os
def batch_convert_pdfs(folder_path):
for pdf_file in os.listdir(folder_path):
if pdf_file.endswith('.pdf'):
with open(f'{folder_path}/{pdf_file}', 'rb') as f:
response = requests.post(
'https://files-to.com/api/pdf/to-json',
files={'file': f}
)
# Guardar JSON
json_data = response.json()
with open(f'{pdf_file}.json', 'w') as out:
json.dump(json_data, out, indent=2)
Validación de Datos
Verifica la calidad del JSON extraído:
const validateExtraction = (json) => {
const issues = [];
// Verificar campos requeridos
if (!json.document || !json.document.pages) {
issues.push('Estructura básica inválida');
}
// Validar tipos de datos
json.document.pages.forEach((page, i) => {
if (typeof page.page_number !== 'number') {
issues.push(`Página ${i}: page_number no es número`);
}
});
return issues.length > 0 ? issues : 'OK';
};
Casos Avanzados
Formularios Multi-página
Extraer datos de formularios que abarcan varias páginas:
{
"form": {
"applicant": {
"name": "...",
"address": "...",
"phone": "..."
},
"pages": [
{ "page": 1, "section": "Información Personal" },
{ "page": 2, "section": "Experiencia Laboral" },
{ "page": 3, "section": "Referencias" }
]
}
}
PDFs Multiidioma
Detecta y etiqueta secciones en diferentes idiomas:
{
"document": {
"language": "mixed",
"sections": [
{ "text": "...", "language": "es" },
{ "text": "...", "language": "en" }
]
}
}
Optimización de Rendimiento
- Procesa en paralelo - Múltiples PDFs simultáneamente
- Cachea resultados - No reconviertas PDFs idénticos
- Comprime JSON - Usa gzip para transferencias
- Limpia datos - Remueve campos innecesarios
Próximos Pasos
- Aprende sobre Casos de Uso Reales
- Resuelve Errores Comunes
- Vuelve a Guía Básica