Skip to main content
← Volver a Thoughts

Desarrollando PDFLince: Arquitectura de un motor PDF sin servidores y 100% privado

22 de marzo de 2025pdflince
EN/ES

Desarrollando PDFLince: Un kit de herramientas PDF centrado en la privacidad

PDFLince nació a partir de una observación muy directa: prácticamente cualquier conversor o editor de PDF en línea te exige subir tus documentos confidenciales a un servidor remoto desconocido.

Ya se trate de un contrato de trabajo, un historial médico, declaraciones fiscales o documentación contable sensible, millones de archivos privados transitan a diario a través de infraestructuras en la nube totalmente opacas. Para realizar tareas tan básicas como unir dos facturas o comprimir un documento para enviarlo por correo, los usuarios se ven obligados a ceder la soberanía de sus datos, sufrir los tiempos de subida a la red y aceptar las políticas de retención impuestas por terceros.

Decidí desarrollar exactamente la alternativa contraria: una estación de trabajo PDF de código abierto y alto rendimiento que opera íntegramente dentro del navegador web. Sin subidas a servidores. Sin colas en la nube. Con un 100% de privacidad garantizada por diseño arquitectónico.

Abrir PDFLince | Código fuente en GitHub


El coste oculto de los conversores de PDF en la nube

Las herramientas web tradicionales siguen ancladas en un paradigma cliente-servidor desfasado:

  1. Sobrecarga de red y lentitud: Los usuarios deben subir archivos de decenas de megabytes por su conexión, esperar el procesamiento remoto y volver a descargarlos.
  2. Riesgos de seguridad y cumplimiento legal: La transferencia de datos personales y sensibles a servidores de terceros suele chocar con regulaciones como el RGPD europeo (GDPR), HIPAA o normativas corporativas de protección de datos.
  3. Monetización artificial y muros de pago: La inmensa mayoría de servicios SaaS limitan las cuentas gratuitas a 2 operaciones diarias, restringen el tamaño máximo a 50 MB o degradan artificialmente la velocidad de compresión para forzar suscripciones mensuales recurrentes.

PDFLince invierte por completo esta dinámica. Cualquier ordenador, tableta o teléfono móvil moderno dispone de una enorme potencia de cálculo local. Al trasladar los algoritmos de manipulación y parseo de documentos a los hilos de ejecución del navegador, eliminamos los servidores por completo.


Funcionalidades principales y operaciones disponibles

PDFLince ofrece una suite completa de operaciones esenciales para la gestión documental diaria, libre de suscripciones y sin límites artificiales en el número de archivos:

1. Unir PDFs

Combina múltiples documentos PDF independientes en un único archivo estructurado. La interfaz permite reordenar visualmente las páginas y los documentos antes de fusionarlos en cuestión de segundos.

2. Comprimir PDF

Reduce el peso de archivos pesados para adjuntarlos por correo electrónico o subirlos a portales de la administración pública. Al eliminar metadatos redundantes, reorganizar los flujos internos de objetos binarios y reempaquetar los elementos incrustados de forma local, PDFLince reduce drásticamente el tamaño del archivo sin enviar un solo byte a Internet.

3. Dividir PDF y Extraer páginas

  • Dividir: Fragmenta documentos extensos en capítulos diferenciados o por rangos de páginas específicos.
  • Extraer: Aísla páginas concretas de un expediente voluminoso para generar un nuevo PDF independiente y ligero.

4. Recortar páginas y Reordenar páginas

  • Recortar páginas: Ajusta los márgenes visuales y elimina bordes o marcas de escaneado no deseadas directamente sobre el lienzo del navegador.
  • Reordenar páginas: Arrastra y suelta páginas para reestructurar la secuencia del documento y corregir errores de paginación.

5. Rotar páginas

Modifica la orientación de páginas sueltas o del documento al completo (90°, 180° o 270°) para corregir escaneos torcidos o invertidos provenientes de bandejas de escáner físicas.

6. Conversión bidireccional (PDF a imágenesImágenes a PDF)

  • PDF a imágenes: Renderizado de alta resolución directamente en canvas para convertir cada página en imágenes PNG o JPEG nítidas, con selector de calidad.
  • Imágenes a PDF: Agrupa fotografías, capturas de recibos o material gráfico en un documento PDF unificado y homogéneo.

Alto volumen de datos: Soporte de hasta 2.000 MB (2 GB)

La mayoría de servicios en la nube bloquean archivos que superen los 50 o 100 MB salvo que contrates planes para empresas.

Dado que PDFLince se ejecuta íntegramente en local, no existen cuotas artificiales de almacenamiento. El motor está optimizado para procesar documentos de hasta 2.000 MB (2 GB) directamente en la memoria del sistema.

Mediante el uso de asignaciones binarias con ArrayBuffer, procesamiento por bloques y la liberación inmediata de memoria tras el rasterizado en el canvas, PDFLince evita saturar la pestaña del navegador, incluso al manipular planos arquitectónicos complejos, expedientes judiciales completos o escaneos artísticos de alta resolución (DPI elevado).


Arquitectura técnica: Procesamiento nativo en el cliente

PDFLince está construido con Next.js 15 (App Router) y TypeScript, configurado con exportación estática (output: "export"). La aplicación se distribuye como activos estáticos inmutables en caché de borde, alcanzando una puntuación perfecta de 100/100 en Google Lighthouse tanto en dispositivos de escritorio como en móviles.

+--------------------------------------------------------------------+
|                         NAVEGADOR CLIENTE                          |
|                                                                    |
|  +---------------------------+       +--------------------------+  |
|  |   Hilo principal (UI)     |       |    Web Worker dedicado   |  |
|  |  - Tipografía Geist       |       |  - Motor pdf-lib         |  |
|  |  - Interfaz Drag & Drop   | <===> |  - Rasterizador PDF.js   |  |
|  |  - Estado reactivo        |       |  - Compresión de streams |  |
|  +---------------------------+       +--------------------------+  |
|                ^                                  ^                |
|                |              Transferable        |                |
|                +----------- ArrayBuffers ---------+                |
+--------------------------------------------------------------------+
|              SISTEMA DE ARCHIVOS / DISCO LOCAL                     |
+--------------------------------------------------------------------+
              ( CERO BYTES ENVIADOS A TRAVÉS DE LA RED )

1. Web Workers dedicados

La manipulación de PDFs pesados en el hilo principal del navegador provocaría bloqueos visuales, congelación de botones y la temida alerta de "Página no responde".

PDFLince delega todas las tareas intensivas de cómputo (parseo, deserialización y compresión) a Web Workers en segundo plano. Utilizamos Objetos Transferibles (Transferable Objects) para transferir la memoria de los ArrayBuffer entre hilos sin sobrecarga de clonación, asegurando una fluidez continua a 60 fps.

2. Sinergia entre motores: pdf-lib y PDF.js

  • pdf-lib (MIT): Se encarga de la mutación del árbol del documento, la creación de tablas de referencias cruzadas (xref), la concatenación de flujos y la limpieza de metadatos.
  • PDF.js (Apache 2.0): El contrastado motor de visualización de Mozilla se emplea para el rasterizado vectorial sobre el canvas al previsualizar o convertir páginas a formatos de imagen.

3. Capacidad de funcionamiento 100% offline

Una vez cargada en el navegador, PDFLince puede funcionar sin conexión a Internet (en modo avión o redes cerradas). El proyecto:

  • No dispone de backend ni bases de datos
  • No registra telemetría de los nombres ni contenidos de los archivos
  • No depende de servicios externos de almacenamiento

Accesibilidad global: Soporte nativo para 9 idiomas

La necesidad de privacidad en el tratamiento de documentos es universal. PDFLince ofrece internacionalización nativa completa en 9 idiomas, con portales idiomáticos dedicados y etiquetas semánticas para una óptima indexación:

Todas las rutas idiomáticas se pre-renderizan de forma estática en tiempo de compilación, garantizando tiempos de respuesta inmediatos y un excelente posicionamiento orgánico en motores de búsqueda para consultas multilingües.


El ecosistema Lince: La suite FotoLince

El tratamiento de documentos PDF suele estar muy ligado a la preparación previa de imágenes y fotografías. Para ofrecer un flujo de trabajo continuo y sin fugas de privacidad, PDFLince se complementa con:

  • FotoLince: Una herramienta web para comprimir, redimensionar y convertir imágenes (WebP, AVIF, PNG, JPEG y TIFF) de forma 100% local mediante módulos WebAssembly. Permite optimizar capturas y fotografías antes de integrarlas en un informe PDF en PDFLince.

Licencia abierta y transparencia técnica

PDFLince es un proyecto plenamente de código abierto distribuido bajo la Licencia MIT:

  • Framework: Next.js 15 (React 19, TypeScript)
  • Estilos: Tailwind CSS & Lucide Icons
  • Motores de procesamiento: pdf-lib (MIT), PDF.js (Apache 2.0)
  • Tipografía: Geist Sans & Geist Mono (MIT)
  • Despliegue: Distribución estática en CDN sin servidor

El código fuente está disponible públicamente en GitHub para auditoría y contribución comunitaria:

Probar PDFLince en vivo | Repositorio en GitHub