Escanear documentos sin subirlos

Pasaportes, contratos, nóminas, informes médicos. Los documentos que más merece la pena escanear son justo los que menos merece la pena entregar al servidor de un desconocido. ScanPDF se construyó para que entregarlos no forme parte del trato.

Lo que hace un conversor online típico

El sitio habitual de «foto a PDF» es un formulario web delante de un servidor. Tu archivo se sube, se convierte en algún lugar que no puedes ver y se te devuelve como descarga. En algún punto de las condiciones hay una promesa de borrarlo al cabo de una hora o un día.

Puede que esa promesa se cumpla. Pero es una promesa, no un mecanismo, y no cubre las partes de las que nunca te informaron: por cuántas máquinas pasó el archivo, qué quedó registrado, qué subencargado guardó la copia de seguridad o qué expone una futura brecha de seguridad. Para un documento de identidad o un contrato firmado, la evaluación honesta del riesgo es que, una vez completada la subida, el resultado ya no está en tus manos.

Lo que hace ScanPDF en su lugar

No hay paso de subida, porque no hay nada a donde subir. ScanPDF es una página estática. Tu navegador lee la foto del disco y todo lo que viene después ocurre dentro de la pestaña:

  • La detección de bordes se ejecuta sobre una compilación de OpenCV en WebAssembly, en tu propia CPU.
  • La corrección de perspectiva y los filtros se aplican en memoria sobre la imagen a resolución completa.
  • El PDF se monta localmente con pdf-lib y se entrega al navegador como una descarga normal.

Ninguna petición transporta los datos de tus imágenes, porque esa petición no existe en el código. Todo el proceso funciona con el cable de red desenchufado una vez cargada la aplicación. Las fotos que envías desde otra aplicación con Compartir y luego ScanPDF también se entregan dentro del dispositivo: el service worker de la aplicación responde él mismo a esa petición y no se transmite nada. Conviene conocer un caso límite: si borras los datos del sitio mientras la aplicación sigue instalada en Android, no queda nada en el dispositivo que reciba el siguiente envío, de modo que el navegador manda esas fotos al servidor web, que no las acepta. Abre la aplicación una vez después de borrar sus datos y compartir vuelve a quedarse en el dispositivo.

Verificable, no solo declarado

Una promesa de privacidad que no puedes comprobar vale bastante poco, así que esta está dispuesta para poder comprobarse de tres maneras.

  • Míralo tú mismo. Abre las herramientas de desarrollo del navegador, ve a la pestaña de red y escanea un documento. Después de cargar los archivos de la propia aplicación, no se envía nada más.
  • Lee el código. La aplicación entera tiene licencia MIT y vive en GitHub: unos cientos de líneas de módulos de JavaScript sin ningún paso de compilación que los oculte, y dos dependencias fijadas por URL y SHA-256.
  • Deja que lo imponga el navegador. El contenedor autoalojado incluye una Content-Security-Policy estricta que limita las conexiones a su propio origen. Con ella, una petición accidental a cualquier host externo la bloquea el navegador, en lugar de simplemente no existir en el código.

La demo alojada frente al autoalojamiento

Conviene ser preciso con esta diferencia, porque la mayoría de los sitios no lo son.

La demo de scanpdf.io es el mismo código, servido desde GitHub Pages. También ahí el procesamiento es totalmente local y tus documentos siguen sin salir de tu máquina. Lo que cambia es quién controla las cabeceras de respuesta: en GitHub Pages es GitHub, así que la CSP estricta de la configuración de nginx del proyecto no se aplica. GitHub también ve la petición web corriente de la propia página, como haría cualquier alojamiento.

Si quieres que la garantía la imponga el navegador en lugar de descansar sobre el hecho de que el código sea lo que dice ser, ejecútalo tú mismo. Un solo comando arranca el contenedor, y en tiempo de ejecución no necesita acceso a la red en absoluto.

Sin cuenta, sin telemetría y sin cookies

No hay nada a lo que registrarse, así que no hay ninguna dirección de correo archivada. No hay script de analítica, ni píxel de seguimiento, ni servicio de informes de errores, ni framework de pruebas A/B. La aplicación no pone cookies. Lo que guarda en tu dispositivo se limita a tus preferencias de interfaz, como el tema y el tamaño de página, una copia de los archivos de la propia aplicación para que se abra sin conexión y, por un momento, las fotos compartidas desde otra aplicación, que se borran en cuanto se abre el escáner. Tus páginas solo existen en memoria: recarga la página y no queda ni rastro de la sesión.

Más que una política, esto es una arquitectura. Una página estática sin servidor no tiene dónde guardar los datos que necesitaría para hacer un mal uso de ellos.

Pruébalo

Abre el escáner y suelta ahí un documento que no habrías subido a ninguna parte. De eso se trata precisamente. Si es la primera vez que fotografías papel, la guía de escaneo explica cómo conseguir un buen resultado al primer intento.