Notes tècniques
Com funciona reader.me
Cap PDF que obris surt de la teva màquina. Aquesta pàgina explica com és possible arquitectònicament, què fa cada peça, i com pots verificar la promesa tu mateix en 30 segons.
La versió curta
Els navegadors moderns porten un runtime gairebé complet: motor JavaScript JIT, WebAssembly, canvas 2D, criptografia, APIs de fitxers i emmagatzematge persistent. Suficient per fer tot el que fa un editor PDF d'escriptori — sense enviar el fitxer a cap lloc.
reader.me són uns 4 MB de JavaScript i WebAssembly que enganxen quatre llibreries open-source a les 20 tools que veus. El PDF que deixes anar al navegador es llegeix des del handle File local a un Uint8Array, es manipula en memòria, i el resultat s'ofereix com a descàrrega via URL.createObjectURL. En cap moment hi ha una petició de xarxa amb el teu document.
Què passa quan deixes anar un PDF
- El navegador passa el fitxer directe a JavaScript. L'API drag-and-drop ens dóna un objecte
Fileapuntant als bytes ja al disc — no hi ha upload per arribar al nostre codi. - Llegim els bytes a un typed array.
await file.arrayBuffer()ens dóna els bytes crus. Tot a partir d'aquí opera sobre aquestUint8Array. - La llibreria adequada fa la feina. Cada tool connecta aquest array a un de quatre motors: pdf-lib (manipulació estructural pura JS), PDF.js (renderitzat), Tesseract.js (OCR via WebAssembly), i Comlink Workers per a fitxers més grans de 20 MB.
- El resultat es converteix en descàrrega. El
Uint8Arrayde sortida s'embolcalla en unBlob, es crea una URL d'objecte temporal, i un<a>invisible amb atributdownloades clica programàticament. El navegador desa el fitxer a la teva carpeta de descàrregues.
Per què és privacitat estructural, no només per política
La majoria d'afirmacions "sense upload" dels serveis PDF al núvol signifiquen alguna cosa més feble: el servidor descarta el teu fitxer després d'unes hores. El fitxer sí que va arribar als seus servidors — només prometen esborrar-lo.
A reader.me no hi ha un "després" per descartar, perquè no hi ha upload de partida. La promesa de privacitat no és una política que apliquem; és una propietat del sistema. No la pots violar per accident sense reescriure l'aplicació.
Aquesta és la diferència entre privacitat per política ("no el guardarem") i privacitat estructural ("mai arriba aquí").
I l'analítica?
Carreguem Google Analytics (diferit, post-LCP) per comptar trànsit i Cloudflare Web Analytics per al rendiment. Cap dels dos veu els teus PDF — només disparen beacons de pageview amb la ruta de URL (ex. /merge-pdf), el locale i el user agent estàndard. Sense noms de fitxer, sense contingut, sense identificador per-usuari al nostre datalayer.
Els robots estan explícitament permesos (GPTBot, ClaudeBot, Google-Extended, PerplexityBot, etc.) — no hi ha dades de documents per scrapejar, només la mateixa còpia pública que estàs llegint.
Verifica-ho tu mateix en 30 segons
- Obre les DevTools del navegador (
F12a Windows,⌥⌘Ia macOS) i ves a la pestanya Network. - Esborra la llista de peticions. Marca "preserve log" perquè sobrevisquin a una recàrrega.
- Deixa anar un PDF a, per exemple, la tool Comprimir. Prem "Comprimir PDF".
- Mira el panell Network. Veuràs peticions d'assets (
pdf.worker.min.mjs, en memòria cau després de la primera càrrega) i el beacon de GA, però cap petició portant el teu fitxer — sense POST, sense XHR, res. La descàrrega arriba com a URLblob:, que és una pseudo-URL local del navegador.
Un cop ho veus, és igual per a totes les tools. L'arquitectura no té una ruta server-side per a les dades del document ni encara que volguéssim.
Trade-offs que acceptem
Fer-ho tot al navegador no és gratis. Llista honesta de limitacions:
- Límit de mida. 50 MB per fitxer al web. El navegador pot amb més però la memòria mòbil és justa; el build desktop Tauri (Fase 4) aixecarà el límit.
- Sense signatures qualificades. SES (Signatura Electrònica Simple) es pot fer client-side; QES amb certificats FNMT/DNIe requereix APIs de smart-card del SO, també Fase 4.
- Les dades d'idioma OCR són grans. La primera execució OCR en un idioma nou descarrega ~12 MB del CDN públic de Tesseract. En memòria cau per sempre després.
- PDF/A perd el text seleccionable. Rasteritzem cada pàgina per garantir el compliment independentment de les fonts de l'input.
Relacionat
- Model de seguretat → — model d'amenaces, encriptació, política CVE.
- Privacitat → — la versió política, en llenguatge clar.
- vs iLovePDF / Smallpdf → — comparació arquitectònica side-by-side.
reader.me és una idea de David Carrero , construït a Color Vivo Internet S.L.