← Volver a proyectos
RetypePDF — Editor de PDF profesional con edición de texto in-place y eliminación real del original
Proyecto

RetypePDF

Editor de PDF profesional con edición de texto in-place y eliminación real del original

Editar texto en un PDF ya generado ha sido tradicionalmente un ejercicio de simulación: la mayoría de las herramientas cubren el texto original con un rectángulo blanco y escriben el texto nuevo encima. Funciona sobre fondos blancos lisos, pero falla en cuanto el documento tiene un color de fondo, un degradado o una imagen detrás del texto: el rectángulo queda visible y delata la edición. RetypePDF nace para resolver ese problema de raíz, con un editor de PDF que corre en el navegador, disponible en retypepdf.giaanc.cl, pensado para que cualquier persona pueda corregir un documento —un contrato, un formulario, un folleto— sin instalar software ni crear una cuenta en el tier gratuito.

La interacción principal es click-to-edit: se hace clic sobre cualquier bloque de texto del PDF y queda editable in place, con una toolbar WYSIWYG flotante que ofrece negrita, cursiva, subrayado, más de 25 familias tipográficas, 24 tamaños de 6 a 72pt y un selector de color. El editor detecta automáticamente las fuentes originales del documento, incluyendo si el texto era bold o italic, para que el reemplazo mantenga la apariencia del original en lugar de caer en una fuente genérica. Un sistema de auto-merge reconstruye líneas completas a partir de los fragmentos de texto que expone el PDF internamente, y el reposicionamiento por drag & drop corre a 60fps con requestAnimationFrame y aceleración por hardware, sin tocar el estado de la aplicación hasta que se suelta el elemento. El editor soporta documentos multipágina, controles de zoom y un historial de undo/redo completo.

La decisión de arquitectura más relevante del proyecto es cómo se elimina el texto original. En lugar de taparlo con una forma blanca —el truco que usa la mayoría de los editores de PDF—, RetypePDF lo borra del content stream del archivo, la estructura interna donde el PDF describe cada operación de dibujo de texto. Para eso, el backend en Node.js delega en un script de Python construido sobre pikepdf, una librería de bajo nivel para manipular la sintaxis interna de un PDF. El resultado es un documento donde el texto original ya no existe en el archivo, no uno donde simplemente quedó oculto detrás de un rectángulo: la edición funciona igual sobre un fondo de color, un degradado o una fotografía, y no deja rastro del contenido anterior si alguien inspecciona el PDF. Si Python no está disponible en el entorno donde corre el backend, el sistema cae automáticamente al método alternativo basado en pdf-lib, degradando la funcionalidad en vez de romperse.

Dos problemas menos visibles resultaron igual de importantes para que la edición se sintiera precisa. El primero es el sistema de coordenadas: un PDF ubica el texto en puntos con el origen en la esquina inferior izquierda, mientras que el canvas donde se renderiza en el navegador usa píxeles con el origen arriba a la izquierda, así que cada posición requiere una conversión de escala y una inversión del eje Y, además de un ajuste de ascendente (ratio 0.8) para que el texto quede alineado verticalmente con el original. El segundo es el mapeo de fuentes: el nombre de fuente que trae un PDF casi nunca coincide directamente con el nombre de una fuente web instalada en el navegador, así que RetypePDF interpreta ese nombre interno para inferir familia, peso y estilo, y aplica un fallback a serif, sans-serif o monospace cuando no logra reconocer la fuente exacta.

Esa combinación de lenguajes obliga a una arquitectura particular: un backend en Node.js con Express que expone la API REST, y un conjunto de scripts de Python que Express invoca como subprocesos para las operaciones que pdf-lib no puede resolver por sí solo, además de la eliminación de texto, extracción de fuentes, desencriptado y protección de documentos. La manipulación de PDF en el lado Node se apoya en pdf-lib junto con @pdf-lib/fontkit para el manejo de fuentes embebidas, mientras que Redis, vía ioredis, guarda el estado temporal de los documentos en edición. El resto de la capa de backend —helmet, cors, express-rate-limit y compression— es hardening estándar para un servicio que recibe archivos de usuarios desconocidos, y multer gestiona la subida de esos archivos. El frontend, en cambio, es deliberadamente minimalista: Vite como build tool y JavaScript vanilla sin framework, con PDF.js para el renderizado del documento, priorizando el rendimiento sobre la comodidad de un framework.

Los PDF subidos se procesan en el servidor y se eliminan automáticamente a los 60 minutos mediante una tarea programada con node-cron; el tier gratuito no exige registro. RetypePDF es un producto comercial con un nivel de uso gratuito, servido desde un VPS propio detrás de Nginx y Cloudflare —sin depender de ningún proveedor de PaaS—, corriendo como servicio systemd con un endpoint /health para monitoreo.

Características

  • Eliminación real de texto del content stream vía Python + pikepdf, no un rectángulo blanco encima
  • Detección automática de fuentes originales del PDF, incluyendo bold e italic
  • Toolbar WYSIWYG flotante: 25+ fuentes, 24 tamaños (6–72pt) y selector de color
  • Borrado automático de archivos a los 60 minutos, sin cuenta requerida en el tier gratuito

Stack

Frontend

ViteJavaScript (Vanilla)PDF.jsCSS3

Backend

Node.jsExpress 4pdf-lib@pdf-lib/fontkitPython 3 + pikepdfRedis (ioredis)

Herramientas

NginxCloudflareVPSsystemdnode-cron