Guide · API REST

Générer une présentation PowerPoint à partir de JSON et d'un modèle

Vos chiffres sont en JSON, les diapositives sont un modèle PowerPoint entretenu par votre équipe. XGenerate remplit aujourd'hui des modèles Word à partir de l'enveloppe fields ; les modèles PowerPoint avec les mêmes espaces réservés nommés sont livrés dans le cadre de votre intégration, de sorte que la même requête remplit les diapositives et renvoie la présentation en PPTX ou en PDF.

Pourquoi ne pas construire la présentation dans le code

  • Une bibliothèque de diapositives fait de chaque mise en page une tâche de programmation ; les responsables de la présentation ne peuvent pas déplacer une zone sans développeur.
  • Automatiser PowerPoint sur un serveur ajoute une installation Office à votre déploiement et n'est pas pris en charge en mode non surveillé.
  • Rapports mensuels, présentations d'offre et dossiers de direction répètent les mêmes diapositives avec de nouveaux chiffres ; la copie manuelle est la source des erreurs.

La requête

L'API d'aujourd'hui remplit des modèles Word : un MERGEFIELD par valeur, une région TableStart par tableau répété, PDF ou DOCX en retour. Les modèles PowerPoint sont liés à la même enveloppe dans le cadre de votre intégration (suivi sous xgenerateio/xgenerate#366) ; aucune sortie PPTX ni point de terminaison de présentation n'est exposé aujourd'hui, l'exemple montre donc l'appel sur modèle Word tel qu'il existe.

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)

# Today's call: a Word template with MERGEFIELD placeholders and a TableStart:kpis region.
cat > fields.json <<'JSON'
{
  "fields": [
    { "name": "report.title",  "value": "Quarterly review Q3 2026" },
    { "name": "report.period", "value": "July to September 2026" }
  ],
  "lists": [
    { "name": "kpis", "value": [
      { "fields": [ { "name": "label", "value": "Revenue" },       { "name": "value", "value": "CHF 1.2 M" } ] },
      { "fields": [ { "name": "label", "value": "New customers" }, { "name": "value", "value": "14" } ] }
    ] }
  ]
}
JSON

curl -sS https://api.xgenerate.io/v2/documents/generate \
  -H "Authorization: Bearer $TOKEN" \
  -F "file=@quarterly-review.docx" \
  -F "fields=@fields.json;type=application/json" \
  -F "format=PDF" \
  -o quarterly-review.pdf

# A PowerPoint template is bound to the same envelope as part of your integration;
# the API exposes no PPTX output today.

Depuis .NET

using System.Net.Http.Json;

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

// Today's call fills a Word template over the JSON transport; a PowerPoint template
// bound as part of your integration takes the same envelope.
var request = new
{
    filename = "quarterly-review.docx",
    content = Convert.ToBase64String(await File.ReadAllBytesAsync("quarterly-review.docx")),
    format = "PDF",
    fields = new
    {
        fields = new[]
        {
            new { name = "report.title", value = "Quarterly review Q3 2026" },
            new { name = "report.period", value = "July to September 2026" }
        },
        lists = new[]
        {
            new
            {
                name = "kpis",
                value = new[]
                {
                    new { fields = new[] { new { name = "label", value = "Revenue" }, new { name = "value", value = "CHF 1.2 M" } } },
                    new { fields = new[] { new { name = "label", value = "New customers" }, new { name = "value", value = "14" } } }
                }
            }
        }
    }
};
var response = await http.PostAsJsonAsync(
    "https://api.xgenerate.io/v2/documents/generate", request);
response.EnsureSuccessStatusCode();

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 PDF en octets bruts ; le transport JSON renvoie filename, content, format et warnings. 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 PPTX n'est pas un format de sortie de l'API aujourd'hui : format vaut PDF ou DOCX, les modèles sont des fichiers Word et il n'existe pas de point de terminaison de présentation. La prise en charge des modèles PowerPoint, espaces réservés texte et tableau d'abord, graphiques hors périmètre au départ, est construite dans le cadre de votre intégration et suivie sous xgenerateio/xgenerate#366. Les présentations existantes ne sont pas converties ; un modèle est lié une fois, puis rempli à chaque requête.

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