← Volver al blog

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