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:
- Verifica que el PDF sea de texto, no imagen
- Si es escaneado, usa herramientas con OCR
- Aumenta la resolución de escaneo (300+ DPI)
- 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:
- Inspecciona el PDF manualmente
- Especifica el orden esperado de columnas
- Usa expresiones regulares para reordenar
- 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:
- Revisa si el texto está en una imagen
- Usa OCR si es necesario
- Extrae manualmente campos críticos
- 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
- Lee Guía Básica
- Aprende Técnicas Avanzadas
- Descubre Casos de Uso