Aide — comment utiliser docme
1. Fournir le document
- Coller votre Markdown (ou HTML) dans la zone de texte ; ou
- Uploader un fichier
.mdou.html— il remplace alors le texte, et son type est déduit de l'extension.
2. Choisir le format de sortie
| Format | Ré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 HTML | Affiche 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 :
| Permission | Par défaut |
|---|---|
| Impression (haute définition) | refusée |
| Impression (basse définition) | refusée |
| Extraction du texte (copier-coller) | refusée |
| Modification du contenu | refusée |
| Annotations et commentaires | refusées |
| Assemblage (pages) | refusé |
| Lecture par un lecteur d'écran | autorisé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.
| Appel | Ce qu'il fait |
|---|---|
GET /api/v1/moi | Vé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/convert | Convertit — et scelle dans le même passage si le bloc sign est fourni. |
POST /api/v1/sign | Scelle 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
| Champ | Valeurs | Défaut |
|---|---|---|
source | le Markdown ou le HTML — obligatoire | — |
inputType | md · html | md |
format | pdf · slides-pdf · pptx · html | pdf |
themeId | un thème de la liste rendue par /api/v1/moi | hadhinat |
filename | le nom du fichier rendu | document |
sign | bloc de signature (ci-dessous) — exige une clé portant sign | absent |
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.
| Plan | Conversions / jour | Signatures / mois | Clés |
|---|---|---|---|
| Gratuit | 20 | aucune | 1 |
| Pro | 500 | 200 | 3 |
| Entreprise | sans limite | 2 000 | 10 |
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":"…"}}.
| Code | Ce qu'il veut dire |
|---|---|
401 UNAUTHORIZED | Clé absente, invalide, révoquée ou expirée. Les quatre se répondent du même mot, à dessein. |
403 FORBIDDEN | La clé est bonne mais ne porte pas cette opération. |
403 PLAN_REQUIRED | Votre 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_EXCEEDED | Forfait épuisé. La réponse porte Retry-After (secondes) et dit courant, limite et periode. |
400 BAD_REQUEST | Demande mal formée — le message dit quoi. |
413 PAYLOAD_TOO_LARGE | Document 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. |
415 | Type de contenu non servi par cet appel. |
422 SIGNATURE_FAILED | La 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
---= saut de diapo (mode diaporama).- Saut de page en PDF : mettez-le sur le titre —
<h2 style="page-break-before: always;">Titre</h2>— jamais un<div>vide. - L'arabe est détecté et rendu en RTL automatiquement. Les URL nues deviennent cliquables.
Confidentialité
Les documents sont convertis sur ce serveur souverain (PDF par Chrome/Chromium, PPTX par pandoc) : rien n'est envoyé à un service tiers.