Lorsque nous avons entrepris de créer EditoraPDF, nous avions un objectif clair : concevoir un éditeur PDF open source entièrement gratuit qui respecte la vie privée des utilisateurs et fonctionne intégralement dans le navigateur. Aucun serveur, aucun téléversement, aucun suivi — uniquement du traitement côté client pur.
Voici l'histoire de sa création, des défis techniques que nous avons rencontrés et des décisions que nous avons prises en cours de route. Que vous soyez un développeur souhaitant construire quelque chose de similaire ou simplement curieux du développement open source, cet article vous offrira un aperçu complet de l'intérieur.
La vision : une édition PDF respectueuse de la vie privée
La plupart des éditeurs PDF actuels vous obligent à téléverser vos documents sur leurs serveurs. Pour des documents sensibles tels que des contrats, des dossiers médicaux ou des relevés financiers, c'est un cauchemar pour la vie privée.
Nous voulions construire quelque chose de différent :
- Traitement 100 % côté client — les fichiers ne quittent jamais votre navigateur
- Aucune installation requise — fonctionne directement dans les navigateurs web
- Aucune inscription ni suivi — utilisation entièrement anonyme
- Open source — un code transparent que chacun peut auditer
- Gratuit pour toujours — pas de paywall ni d'abonnement
Forts de ces principes, nous avons commencé à évaluer les technologies susceptibles de concrétiser cette vision.
Le choix de la stack technique
Framework frontend : Next.js 14
Nous avons choisi Next.js 14 avec le nouveau App Router pour plusieurs raisons :
- Excellentes capacités SEO — rendu côté serveur et gestion des métadonnées prêts à l'emploi
- Prise en charge de l'export statique — déployez partout (Vercel, Netlify, GitHub Pages)
- Intégration de TypeScript — sûreté de typage et meilleure expérience de développement
- Optimisation des performances — découpage automatique du code, optimisation des images
- Expérience de développement — rechargement à chaud, excellente documentation, vaste écosystème
Rendu PDF : PDF.js
PDF.js de Mozilla est la référence absolue pour le rendu des PDF dans le navigateur. C'est ce qui alimente le lecteur PDF intégré de Firefox.
Principaux avantages :
- Éprouvé sur des millions de navigateurs
- Excellente qualité de rendu
- Capacités d'extraction de texte
- Rendu basé sur canvas pour la performance
- Maintenance active par Mozilla
Manipulation PDF : pdf-lib
Pour créer et modifier des PDF, nous utilisons pdf-lib — une bibliothèque en pur JavaScript qui s'exécute entièrement dans le navigateur.
Principales fonctionnalités :
- Créer des PDF de toutes pièces
- Modifier des PDF existants (ajouter des pages, pivoter, supprimer)
- Intégrer du texte, des images et des formes
- Copier des pages entre documents
- Aucune dépendance à Node.js
Gestion d'état : Zustand
Plutôt que Redux, nous avons choisi Zustand — une bibliothèque de gestion d'état minimale et rapide.
- API simple — aucun code répétitif
- Conception orientée TypeScript
- Petite taille de bundle (~1KB)
- Aucun fournisseur de contexte nécessaire
Style : Tailwind CSS
Tailwind CSS nous offre un style utility-first avec une excellente expérience de développement et de petits bundles de production grâce au purge automatique.
Architecture et choix de conception
1. Traitement uniquement côté client
Tout se passe dans le navigateur :
User uploads PDF ↓ PDF.js parses and renders to canvas ↓ User makes edits (text, images, shapes) ↓ pdf-lib creates new PDF with changes ↓ Download to user's device
À aucun moment le fichier ne quitte l'appareil de l'utilisateur. C'est une véritable confidentialité dès la conception.
2. Système de coordonnées normalisé
Un défi majeur : les PDF ont des tailles de page différentes et les utilisateurs peuvent zoomer ou dézoomer. Comment suivre la position des superpositions ?
Solution : Normaliser toutes les coordonnées dans l'intervalle [0, 1].
// Instead of absolute pixels:
{ x: 150, y: 200 }
// We store normalized coordinates:
{ x: 0.25, y: 0.33 }
// Then scale to current viewport:
actualX = normalizedX * pageWidth * zoom
actualY = normalizedY * pageHeight * zoomCela rend les superpositions indépendantes du zoom et transposables d'une taille de page à l'autre.
3. Architecture des composants
Nous avons structuré l'application en composants ciblés :
PdfViewer— rendu du canvas principalThumbnails— barre latérale de navigation des pagesToolbar— contrôles de zoom, rotation et suppressionEditToolbar— sélection d'outils (texte, image, forme)AdvancedOverlayLayer— rendu du texte, des images et des formesExportButton— logique d'export PDF
4. Modèle de gestion d'état
Notre store Zustand gère :
{
originalFile: File,
pages: [
{
id: string,
originalIndex: number,
rotation: 0 | 90 | 180 | 270,
deleted: boolean,
textOverlays: [],
imageOverlays: [],
shapeOverlays: []
}
],
selectedPageId: string,
zoom: number,
editMode: 'select' | 'text' | 'image' | 'shape'
}Les défis techniques que nous avons rencontrés
Défi 1 : précision de l'extraction de texte
PDF.js peut extraire du texte, mais le positionnement n'est pas toujours parfait au pixel près en raison de la façon dont les PDF encodent le texte (parfois caractère par caractère, parfois mot par mot).
Solution : Nous extrayons les éléments de texte avec leurs matrices de transformation et les convertissons en coordonnées normalisées avec des boîtes englobantes généreuses.
Défi 2 : les performances avec les gros PDF
Le rendu de PDF de plus de 100 pages peut figer le navigateur.
Solution :
- Charger les pages de façon paresseuse (ne rendre que les pages visibles)
- Utiliser requestAnimationFrame pour un rendu fluide
- Recommander une limite de 25MB / 50 pages
- Canvas hors écran pour les miniatures
Défi 3 : la qualité de l'export
L'intégration de texte et d'images avec pdf-lib nécessite une transformation soignée des coordonnées de l'espace du navigateur vers l'espace PDF.
Solution : Construire un pipeline de transformation complet qui gère :
- Les rotations de page
- Les différences de système de coordonnées (axe Y inversé en PDF)
- L'intégration et le dimensionnement des polices
- La conversion des formats d'image
Défi 4 : la compatibilité entre navigateurs
Les différents navigateurs présentent des implémentations de canvas légèrement différentes et des particularités de rendu PDF.
Solution : Des tests approfondis sur Chrome, Firefox, Safari et Edge. Utiliser la détection de fonctionnalités plutôt que la détection de navigateur.
Pourquoi nous l'avons rendu open source
Dès le premier jour, nous savions que cela devait être open source :
1. Transparence = confiance
Lorsqu'on manipule des documents sensibles, les utilisateurs doivent pouvoir vérifier que les fichiers restent vraiment locaux. L'open source permet à chacun d'auditer le code.
2. Contributions de la communauté
L'open source permet à des développeurs du monde entier de contribuer des fonctionnalités, de corriger des bugs et d'améliorer l'outil.
3. Ressource d'apprentissage
Nous avons tellement appris des projets open source. Nous pouvons désormais rendre la pareille et aider d'autres personnes à apprendre Next.js, le traitement PDF et le développement web.
4. Pérennité
Même si nous cessons de le maintenir, la communauté peut le forker et poursuivre le développement. L'outil continue de vivre.
Les résultats
Après des mois de développement, nous avons lancé EditoraPDF avec :
Le code est disponible sur github.com/affsquadDevs/editorapdf sous licence MIT.
Points clés à retenir pour les développeurs
- ✓Le traitement côté client est puissant — Les navigateurs modernes peuvent gérer des tâches complexes qui nécessitaient autrefois des serveurs
- ✓Choisissez les bonnes bibliothèques — PDF.js et pdf-lib nous ont fait gagner des mois de développement
- ✓La normalisation des coordonnées est essentielle — Elle rend les superpositions transposables et indépendantes du zoom
- ✓Les performances comptent — Le chargement paresseux et l'optimisation sont cruciaux pour les gros fichiers
- ✓L'open source profite à tous — Transparence, communauté et apprentissage en sortent tous gagnants
Participez
EditoraPDF est un projet open source, et nous accueillons les contributions de développeurs de tous niveaux.
Mettre une étoile sur GitHub
Montrez votre soutien et restez informé des nouvelles versions
Signaler des bugs
Aidez-nous à nous améliorer en signalant les problèmes que vous rencontrez
Contribuer au code
Soumettez des pull requests avec de nouvelles fonctionnalités ou des améliorations
Essayez-le
Modifiez vos PDF en ligne et partagez vos retours
Foire aux questions
Avec quelle stack technologique EditoraPDF est-il construit ?
EditoraPDF est construit avec Next.js 14, TypeScript, React 18, PDF.js pour le rendu, pdf-lib pour la manipulation, Zustand pour la gestion d'état et Tailwind CSS pour le style. Il est entièrement open source sous licence MIT.
Pourquoi avoir choisi Next.js pour un éditeur PDF ?
Next.js offre d'excellentes performances, des capacités SEO, la prise en charge de l'export statique et une expérience de développement remarquable. L'App Router facilite la création d'applications rapides et optimisées pour le SEO, déployables partout.
EditoraPDF est-il vraiment open source ?
Oui, EditoraPDF est 100 % open source sous licence MIT. Le code source complet est disponible sur GitHub à l'adresse github.com/affsquadDevs/editorapdf
Comment fonctionne le traitement PDF côté client ?
PDF.js effectue le rendu des PDF sur un canvas HTML dans le navigateur, tandis que pdf-lib manipule la structure du PDF. Tout le traitement se déroule localement dans le navigateur de l'utilisateur grâce à JavaScript, garantissant une confidentialité et une sécurité totales sans aucun téléversement vers un serveur.
Puis-je utiliser le code d'EditoraPDF dans mon propre projet ?
Absolument ! EditoraPDF est sous licence MIT, ce qui signifie que vous pouvez utiliser, modifier et distribuer le code librement, même dans des projets commerciaux. Veillez simplement à inclure la notice de licence d'origine.
Comment puis-je contribuer au projet ?
Consultez notre guide de contribution sur GitHub. Vous pouvez contribuer du code, signaler des bugs, suggérer des fonctionnalités, améliorer la documentation ou aider aux tests.
Réflexions finales
Créer EditoraPDF a été un parcours exigeant mais gratifiant. Nous avons énormément appris sur le traitement PDF, les capacités des navigateurs et le développement open source.
Le meilleur dans tout ça ? N'importe qui peut désormais s'emparer de ce code, en tirer des leçons, le modifier ou créer quelque chose d'encore meilleur. C'est toute la puissance de l'open source.
Si vous travaillez sur un projet similaire ou si vous êtes simplement curieux du code, consultez le dépôt GitHub. Nous serions ravis de recueillir vos retours, de répondre à vos questions ou d'examiner vos pull requests.