← Volver al blog

Errores Comunes PDF a JSON: Soluciones

Cuando conviertes PDFs a JSON, pueden surgir problemas. Aquí están los errores más comunes y cómo solucionarlos.

Error 1: Texto Extraído Incorrectamente

Síntoma: El texto tiene caracteres raros, espacios faltantes, o palabras incompletas.

PDF original: "Factura #2024-001"
JSON extraído: "Factura #2024-00l" (0 como L)

Causas:

  • PDF es una imagen escaneada (OCR)
  • Fuente PDF con caracteres especiales
  • Baja calidad de escaneo

Solución:

  1. Verifica que el PDF sea de texto, no imagen
  2. Si es escaneado, usa herramientas con OCR
  3. Aumenta la resolución de escaneo (300+ DPI)
  4. Valida después con expresiones regulares

Error 2: Tablas Desalineadas

Síntoma: Las columnas de tablas aparecen en orden incorrecto o datos mezclados.

// Esperado:
"table": {
  "headers": ["Nombre", "Edad"],
  "rows": [["Juan", 30]]
}

// Obtenido:
"table": {
  "headers": ["Nombre", "Edad"],
  "rows": [["30", "Juan"]] // Columnas invertidas
}

Causas:

  • PDF con columnas irregulares
  • Espacios en blanco variable
  • Texto con saltos de línea dentro de celdas

Solución:

  1. Inspecciona el PDF manualmente
  2. Especifica el orden esperado de columnas
  3. Usa expresiones regulares para reordenar
  4. Considera convertir el PDF a Excel primero

Error 3: JSON Inválido

Síntoma: No puedes parsear el JSON, obtienes error de sintaxis.

// Inválido: comillas sin escapar
{
  "text": "Dijo: "Hola""
}

// Válido:
{
  "text": "Dijo: \"Hola\""
}

Causa: Caracteres especiales no escapados.

Solución:

// Valida en jsonlint.com
const validateJSON = (str) => {
  try {
    JSON.parse(str);
    return true;
  } catch (e) {
    console.log('JSON inválido:', e.message);
    return false;
  }
};

Error 4: Campos Faltantes

Síntoma: El JSON no incluye datos que claramente están en el PDF.

Causas:

  • Texto en colores claros (extraído como fondo)
  • Datos en imágenes o gráficos
  • Texto rotado o formatos especiales

Solución:

  1. Revisa si el texto está en una imagen
  2. Usa OCR si es necesario
  3. Extrae manualmente campos críticos
  4. Valida que el PDF sea legible

Error 5: Números Incorrectos

Síntoma: Los números se extraen como texto o tienen decimales incorrectos.

PDF: 1.234,56 (formato europeo)
JSON: "1.234,56" (texto en lugar de número)

Solución:

const parseNumber = (str) => {
  // Detecta separador decimal
  if (str.includes(',') && str.includes('.')) {
    // Formato europeo: 1.234,56
    return parseFloat(str.replace(/\./g, '').replace(',', '.'));
  }
  return parseFloat(str);
};

Error 6: Fechas con Formato Incorrecto

Síntoma: Las fechas no se reconocen o están en formato equivocado.

Solución:

const parseDate = (str) => {
  // Intenta múltiples formatos
  const formats = [
    /(\d{2})\/(\d{2})\/(\d{4})/, // DD/MM/YYYY
    /(\d{4})-(\d{2})-(\d{2})/,   // YYYY-MM-DD
    /(\d{2})-(\d{2})-(\d{4})/    // DD-MM-YYYY
  ];

  for (let fmt of formats) {
    const match = str.match(fmt);
    if (match) return new Date(match[0]);
  }
  return null;
};

Error 7: Codificación de Caracteres

Síntoma: Acentos y caracteres especiales aparecen como ???? o símbolos raros.

Causa: Encoding UTF-8 no reconocido.

Solución:

// Asegura UTF-8
const sanitize = (str) => {
  return str.normalize('NFKC').replace(/[^\x20-\x7E\u0080-\uFFFF]/g, '');
};

Checklist de Validación

Antes de usar el JSON en producción:

  • [ ] ¿El JSON es válido? (jsonlint.com)
  • [ ] ¿Todos los números son tipo number?
  • [ ] ¿Las fechas tienen formato consistente?
  • [ ] ¿No hay caracteres especiales sin escapar?
  • [ ] ¿Las tablas tienen headers y rows?
  • [ ] ¿Los campos críticos están presentes?

Optimización Post-Conversión

const cleanupJSON = (json) => {
  return {
    ...json,
    // Elimina campos vacíos
    fields: Object.fromEntries(
      Object.entries(json.fields || {}).filter(([, v]) => v !== null && v !== '')
    )
  };
};

Próximos Pasos