Guide · API REST

Convertir du Markdown en DOCX en un appel d'API

Votre système écrit du Markdown : notes de version, rapports, texte issu d'un modèle. Envoyez-le à l'API et recevez un document Word dont les titres, listes, tableaux et mises en valeur sont de vraies mises en forme Word. Ajoutez votre modèle de papier à en-tête : le texte prend la place de son espace réservé body, et les autres champs de fusion sont remplis à partir de JSON.

Pourquoi ne pas convertir le Markdown vous-même

  • Un convertisseur dans votre processus produit un document nu ; l'en-tête, les polices et les styles qu'attend votre entreprise ne sont pas dans le texte.
  • Les convertisseurs en ligne de commande sont un binaire de plus à installer et à maintenir à jour sur chaque serveur qui écrit des documents.
  • Un texte généré, par un modèle ou un flux de travail, doit devenir un document que des personnes peuvent encore modifier et valider.

La requête

Transport multipart : le Markdown est la partie markdown, le format une simple valeur de formulaire ; format=DOCX renvoie le fichier Word, PDF les pages rendues. Une partie file optionnelle porte un modèle Word dont l'espace réservé MERGEFIELD body reçoit le texte, et une partie fields remplit ses autres champs de fusion. Sans modèle, seuls les en-têtes de l'enveloppe fields s'appliquent.

TOKEN=$(curl -sS https://auth.xgenerate.io/realms/xgenerate/protocol/openid-connect/token \
  -d grant_type=client_credentials \
  -d client_id="$XGENERATE_CLIENT_ID" \
  -d client_secret="$XGENERATE_CLIENT_SECRET" | jq -r .access_token)

# 1. Plain Markdown: the text is the document.
curl -sS https://api.xgenerate.io/v2/documents/generate-from-markdown \
  -H "Authorization: Bearer $TOKEN" \
  -F "markdown=@release-notes.md;type=text/markdown" \
  -F "format=DOCX" \
  -o release-notes.docx

# 2. Onto a letterhead: the template's MERGEFIELD body receives the text,
#    its other merge fields are filled from the fields part.
cat > fields.json <<'JSON'
{ "fields": [ { "name": "document.date", "value": "25.10.2026" } ] }
JSON

curl -sS https://api.xgenerate.io/v2/documents/generate-from-markdown \
  -H "Authorization: Bearer $TOKEN" \
  -F "markdown=@release-notes.md;type=text/markdown" \
  -F "file=@letterhead.docx" \
  -F "fields=@fields.json;type=application/json" \
  -F "format=DOCX" \
  -o release-notes.docx

Depuis .NET

using System.Net.Http.Json;

using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization = new("Bearer", token);

// JSON transport: the Markdown travels as text, the optional letterhead template base64-encoded.
var request = new
{
    filename = "release-notes.md",
    markdown = await File.ReadAllTextAsync("release-notes.md"),
    template = Convert.ToBase64String(await File.ReadAllBytesAsync("letterhead.docx")),
    fields = new
    {
        fields = new[] { new { name = "document.date", value = "25.10.2026" } }
    },
    format = "DOCX"
};
var response = await http.PostAsJsonAsync(
    "https://api.xgenerate.io/v2/documents/generate-from-markdown", request);
response.EnsureSuccessStatusCode();

// result.Filename is "release-notes.docx": the extension follows the requested format.
var result = await response.Content.ReadFromJsonAsync<GenerateResult>();
await File.WriteAllBytesAsync(result!.Filename, Convert.FromBase64String(result.Content));

record GenerateResult(string Filename, string Content, string Format);

La réponse

L'appel multipart renvoie le DOCX avec Content-Type application/vnd.openxmlformats-officedocument.wordprocessingml.document. Le transport JSON renvoie filename, content, format et warnings, le fichier encodé en base64 dans content. Avec un modèle, les avertissements nomment les emplacements d'image, de QR et d'en-tête restés sans valeur ; les champs de fusion et les régions sans données sont supprimés sans avertissement. La requête réussit dans les deux cas.

Ce que XGenerate ne fait pas

Le Markdown couvre les bases GFM : titres, listes, mises en valeur, liens, code, citations et tableaux à barres verticales. La syntaxe d'image est réduite à son texte alternatif et rien n'est chargé depuis le réseau. Le texte est rendu par le moteur Word ; les mises en page CSS complexes et le JavaScript ne sont pas interprétés. Pour une mise en page qui doit correspondre à un document existant, le modèle Word est la voie.

Essayez-le sur votre propre modèle

Envoyez-nous un fichier Word que vous utilisez aujourd'hui. Nous le rendons avec vos données et vous renvoyons le PDF avec le modèle adapté, pour que votre évaluation ne dépende pas de nous.

Demander une démo

Guides associés