Journal Un éditeur PDF qui tourne entièrement dans le navigateur

Posté par  . Licence CC By‑SA.
Étiquettes :
-3
12
oct.
2026

Corriger une ligne déjà écrite dans un PDF — une date fausse, un nom mal orthographié — est la fonction que presque tous les services en ligne réservent à leur abonnement. Ajouter du texte par-dessus est gratuit partout ; modifier celui qui est déjà là, non. La raison est simple : ça leur coûte du temps de serveur.

J'ai voulu voir si on pouvait s'en passer complètement. Le résultat est VoilàPDF, sous AGPL v3 : https://github.com/dilmseo/editeur-pdf

Le site n'a aucun code serveur. Ce sont des fichiers statiques : le document est lu, modifié et réenregistré par l'onglet, en JavaScript et WebAssembly. Il ne peut pas être reçu puisqu'il n'est jamais envoyé — ouvrez un outil, coupez votre connexion, il continue de fonctionner.

Comment la modification de texte marche

C'est la partie qui m'a demandé le plus de tâtonnements.

pdf.js donne la ligne de base, la largeur et le corps exacts de chaque fragment de texte. Les fragments partageant une ligne de base sont regroupés en un bloc modifiable. À l'enregistrement, pdf-lib recouvre l'ancienne ligne d'un rectangle rempli de la couleur moyenne relevée sur le rendu du fond, puis réécrit le texte sur la même ligne de base.

Au début je quantifiais cette couleur sur une palette réduite : il restait un rectangle gris parfaitement visible sur tout fond légèrement teinté. La moyenne exacte des pixels échantillonnés règle le problème.

Deux détails que j'ai dû mesurer plutôt que supposer :

  • Le gras se détecte par la largeur, pas par le nom de police. Le nom inscrit dans les métadonnées ment assez souvent pour être inutilisable. Comparer la largeur mesurée de la ligne aux métriques des polices standard identifie la graisse à 0,2 % près, contre 3,4 % quand on se trompe de graisse.
  • L'italique ne se détecte pas. J'ai essayé de mesurer la pente de l'encre : trois lignes parfaitement droites sur quatre étaient marquées italiques. Une heuristique fausse vaut moins que pas d'heuristique du tout, je l'ai retirée. L'italique se règle à la main.

Le reste

Vingt-six outils en tout : conversion depuis et vers les formats Office et les images, fusion, découpe, rotation, rognage, numérotation, filigrane, signature, nettoyage des métadonnées. Les PDF scannés passent par tesseract.js en français, localement, et la reconnaissance se déclenche toute seule quand il n'y a pas de texte sélectionnable.

Deux outils plus récents utilisent transformers.js : un résumé et une traduction français ↔ anglais. Pour le résumé, je n'ai pas trouvé de modèle multilingue qui tienne dans un navigateur — mt5-small pèse 411 Mo et n'est même pas entraîné pour ça. Le résumé par défaut est donc extractif : il note chaque phrase sur les mots qu'elle partage avec le document et restitue les mieux notées dans l'ordre d'origine. Instantané, toutes langues, et surtout il n'invente rien, ce qui me paraît préférable sur un contrat. distilbart-cnn reste disponible en option pour l'anglais.

La traduction, elle, est un vrai modèle : opus-mt, 103 Mo téléchargés au premier clic puis gardés en cache par le navigateur. Le modèle descend, le document ne monte jamais.

Les limites, parce qu'elles comptent

  • Le texte modifié recouvre l'ancien sans le supprimer du fichier. Ce n'est pas un caviardage : pdftotext retrouve l'original. C'est écrit sur chaque page d'outil, parce que quelqu'un finira par vouloir masquer un RIB avec.
  • Les polices d'origine ne sont pas réemployées — l'une des 14 polices standard du PDF.
  • La compression et le déverrouillage rematricent les pages : le texte devient une image.
  • La conversion vers les formats Office reconstruit le contenu, pas la maquette.

Aucun compte, aucun cookie, aucune mesure d'audience, aucun stockage local, et les polices sont servies depuis le domaine du site. Tout est embarqué dans vendor/, aucune compilation : node serveur.js et c'est en ligne chez vous.

Je prends volontiers les retours, en particulier sur les PDF qui le mettent en défaut — c'est le genre de format où les cas tordus sont la règle plutôt que l'exception.

  • # Rien de nouveau

    Posté par  . Évalué à 0 (+1/-1).

    Comme l'auteur a eu la flemme d'écrire le code, le journal et le site, que l'ensemble a été vibe codé… J'ai pas pris le temps de lire le journal en détail, c'est comme souvent avec les llm, trop verbeux.

    Mais au final, je me demande : quel intérêt de griller autant de token ia pour un service déjà complètement rendu par PdfSam?

    C'est un peu comme faire des tours en voiture sans aller nul part, juste pour conduire. Sans même conduire sois même ni profiter du paysage.

    Bref, je ne pige pas la démarche…

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.