đź“„ docme

Aide — comment utiliser docme

1. Fournir le document

2. Choisir le format de sortie

FormatRésultat
PDF (A4)Document paginé A4, thémé — Markdown ou HTML.
Diaporama PDF (16:9)Une diapo par page ; séparez les diapos par une ligne ---.
PowerPoint (PPTX)Présentation éditable ; attend du Markdown (les titres ## ouvrent les diapos).
Aperçu HTMLAffiche le document thémé dans le navigateur (sans téléchargement).

3. Choisir un thème — palette.amia.fr

Les thèmes proposés (hadhinat, carbon, dark…) sont dérivés de palette.amia.fr — le Palette Studio, la source unique des palettes de l'écosystème @mostajs/*. Chaque palette y est composée à partir de quelques couleurs de marque, puis toutes les couleurs utiles sont dérivées et validées pour le contraste (WCAG) : aucune couleur illisible n'est produite (l'accent ne porte jamais de texte).

Pour ajouter ou ajuster un thème : composez-le sur palette.amia.fr (aperçus PC/mobile, table de contrastes), récupérez ses couleurs de marque, puis ajoutez son entrée au magasin @mostajs/palette (GALLERY). docme le proposera automatiquement.

Le thème s'applique au PDF et à l'aperçu HTML. Le PPTX suit un gabarit PowerPoint (pas le CSS).

4. Signer un document, et le protéger

Deux chemins, le même cœur : la case Signer le PDF produit en bas du convertisseur, et l'écran Signer qui prend un PDF déjà fait et le scelle tel quel.

Le certificat

Un certificat PKCS#12 (.p12 / .pfx) et sa phrase secrète. Celui que vous téléversez prime ; à défaut, docme emploie celui du serveur s'il est configuré. La clé ne vit qu'en mémoire le temps de la signature : elle n'est ni stockée, ni journalisée, et la phrase secrète ne passe jamais par la ligne de commande du moteur.

La protection — ni impression, ni copier-coller

Cocher Chiffrer (AES-256) et restreindre ajoute au document des permissions, que vous réglez case par case. Le tableau ci-dessous donne l'état par défaut :

PermissionPar défaut
Impression (haute définition)refusée
Impression (basse définition)refusée
Extraction du texte (copier-coller)refusée
Modification du contenurefusée
Annotations et commentairesrefusées
Assemblage (pages)refusé
Lecture par un lecteur d'écranautorisée

Une case cochée veut dire autorisé, jamais « interdit » : c'est le sens du format PDF, et c'est ce qu'affichera un vérificateur — décocher « Impression » fait lire print_highres : False. L'accessibilité reste ouverte à dessein : protéger un texte contre la copie n'est pas une raison de le fermer à qui ne voit pas.

Autoriser l'impression haute définition autorise aussi l'impression simple : le format ignore le bit « haute qualité » quand l'impression est refusée.

Le mot de passe à l'ouverture — le seul verrou dur

La zone Mot de passe à l'ouverture change la nature de la protection. Renseignée, le document ne s'ouvre dans aucun lecteur sans ce mot de passe : ce n'est plus une consigne qu'on respecte, c'est un chiffrement qu'on ne contourne pas. La laisser vide garde un document librement lisible, dont les restrictions reposent sur la bonne volonté du lecteur.

Saisir un mot de passe active la protection : les permissions affichées s'appliquent. docme ne le conserve pas — perdu, le document l'est avec lui. Il n'y a pas de recours, et c'est précisément ce qui fait sa valeur.

⚠ Sans mot de passe d'ouverture, les restrictions sont déclaratives. Le document s'ouvre, et ce sont les lecteurs — Acrobat et tous les sérieux — qui refusent d'imprimer ou de copier. Un outil qui choisit de les ignorer le peut : c'est ainsi que le format PDF est fait. Sans mot de passe, « empêcher » veut donc dire « tout lecteur honnête refuse », pas « c'est impossible ». Avec mot de passe, c'est impossible.

⚠ La protection exige le moteur pyhanko sur le serveur. Absent, docme signe encore, mais refuse la protection et le dit — il ne rendra jamais un document imprimable à qui l'a demandé protégé. La signature, elle, ne demande rien de plus que Node.

5. Sans navigateur — la même conversion en ligne de commande

Ce site est une interface. Le convertisseur, lui, est un module qui s'installe :

npm i -g @mostajs/doc-export

doc-export rapport.md -o rapport.pdf            # PDF A4 thémé
doc-export cours.md -f slides-pdf -t carbon     # diaporama 16:9
cat doc.md | doc-export -f html -o -            # dans un tuyau
doc-export --capacites                          # ce qui est disponible ici

Même cœur, donc même document : cette page et cette commande appellent le même @mostajs/doc-export. La commande sert ce qu'un navigateur ne sait pas faire — un dossier entier d'un coup, une intégration continue, un poste sans réseau.

⚠ Une seule différence, et elle est voulue. Ce site interroge le Studio en direct ; la commande lit la galerie embarquée dans @mostajs/palette. Un thème retouché ce matin paraît ici tout de suite, et en ligne de commande après mise à jour du module. Le texte est le même ; les couleurs peuvent être d'un jour d'écart.

⚠ PDF ⇒ Chrome/Chromium, PPTX ⇒ pandoc. Absents, la commande le dit et s'arrête : elle ne rend jamais un document dégradé en silence.

La signature suit la même règle et a sa propre commande, pour la même raison — ce site n'a aucun privilège sur elle :

npm i -g @mostajs/pdf-sign

mosta-pdf-sign sign rapport.pdf signe.pdf --p12 cert.p12 --pass ••• --restrict                                     --open-password •••     # verrou dur
mosta-pdf-sign verify signe.pdf --trust ca.pem      # intact ? valide ? de confiance ?
mosta-pdf-sign engines                              # ce serveur sait-il protéger ?

6. Depuis un logiciel — l'API HTTP

Les écrans servent une personne. L'API sert un système : une facture à la commande, un rapport chaque nuit, un relevé à chaque signature de contrat. Elle passe par le même moteur que cette page — même thème, même document.

Tout appel présente une clé dans l'en-tête Authorization. Il n'y a pas de route publique, pas de clé dans l'URL : un secret qui voyage dans une adresse se retrouve dans les journaux du serveur, dans l'historique du navigateur et dans le Referer envoyé à des tiers.

AppelCe qu'il fait
GET /api/v1/moiVĂ©rifie la clĂ© et dit ce qu'elle porte, ce que ce serveur sait faire, et sa limite de taille. Ne consomme pas de conversion.
POST /api/v1/convertConvertit — et scelle dans le mĂŞme passage si le bloc sign est fourni.
POST /api/v1/signScelle un PDF dĂ©jĂ  fait.

Convertir

curl -X POST https://docme.amia.fr/api/v1/convert   -H "Authorization: Bearer sk_live_…"   -H "Content-Type: application/json"   -d '{"source":"# Rapport

Texte.","format":"pdf","themeId":"hadhinat"}'   -o rapport.pdf
ChampValeursDéfaut
sourcele Markdown ou le HTML — obligatoire—
inputTypemd · htmlmd
formatpdf · slides-pdf · pptx · htmlpdf
themeIdun thème de la liste rendue par /api/v1/moihadhinat
filenamele nom du fichier rendudocument
signbloc de signature (ci-dessous) — exige une clé portant signabsent

Signer, et protéger

Deux entrées, selon d'où l'on appelle — le PDF brut avec les options en paramètres d'URL, ou du JSON avec le PDF en base64 :

curl -X POST "https://docme.amia.fr/api/v1/sign?proteger=1&motdepasse=•••&reason=Original"   -H "Authorization: Bearer sk_live_…"   -H "Content-Type: application/pdf"   --data-binary @rapport.pdf -o rapport-signe.pdf

Le bloc sign (dans /convert) et les paramètres (dans /sign) portent les mêmes noms : proteger, motdepasse, permissions, p12 (base64) et passphrase, reason, name, location.

⚠ Deux règles reprises telles quelles des écrans, pour que l'API et le navigateur rendent le même document. Un mot de passe vaut demande de protection : le fournir suffit, sans proteger. Et un bloc permissions fourni fait liste close — ce qui n'y figure pas est refusé, jamais laissé au moteur. Bloc absent, ce sont les valeurs par défaut du tableau du §4 qui s'appliquent.

Les quotas

Deux ressources se comptent, sur deux périodes différentes — et ce n'est pas un caprice. Une conversion est fréquente et bon marché : elle se borne au jour, ce qui protège le serveur sans gêner personne. Une signature est rare, coûteuse à exécuter, et c'est elle qu'on achète : elle se borne au mois, comme le forfait — pour qu'un jour de forte activité ne bloque pas.

PlanConversions / jourSignatures / moisClés
Gratuit20aucune1
Pro5002003
Entreprisesans limite2 00010

GET /api/v1/moi rend quotas.conversion et quotas.signature avec courant, limite et restant : de quoi s'arrêter avant le refus plutôt que de le découvrir au milieu d'une chaîne de traitement. Cet appel ne consomme rien.

Un appel qui échoue n'est pas compté : il n'a rien rendu. Et le quota est vérifié avant le rendu et avant le certificat — ce qui sera refusé à la fin est refusé tout de suite, sans dépenser trois secondes de moteur.

Ce que l'API répond

Un succès rend le fichier, avec son type et son nom. Une erreur rend du JSON — jamais une page HTML : {"error":{"code":"…","message":"…"}}.

CodeCe qu'il veut dire
401 UNAUTHORIZEDClé absente, invalide, révoquée ou expirée. Les quatre se répondent du même mot, à dessein.
403 FORBIDDENLa clé est bonne mais ne porte pas cette opération.
403 PLAN_REQUIREDVotre plan ne comprend pas cette opération. Aucune attente n'y changera rien — c'est pourquoi cette réponse ne porte pas de Retry-After.
429 QUOTA_EXCEEDEDForfait épuisé. La réponse porte Retry-After (secondes) et dit courant, limite et periode.
400 BAD_REQUESTDemande mal formée — le message dit quoi.
413 PAYLOAD_TOO_LARGEDocument au-delà de la limite (voir limiteCorpsMo dans /api/v1/moi). La réponse ferme la connexion : réduisez l'envoi, ne réessayez pas à l'identique.
415Type de contenu non servi par cet appel.
422 SIGNATURE_FAILEDLa conversion a réussi, la signature a échoué — certificat ou phrase secrète.

La signature n'est servie que si ce serveur la porte. /api/v1/moi le dit avant tout appel : signature.disponible, signature.motDePasseOuverture, signature.certificatServeur.

Astuces

Confidentialité

Les documents sont convertis sur ce serveur souverain (PDF par Chrome/Chromium, PPTX par pandoc) : rien n'est envoyé à un service tiers.