Leitfaden · REST-API

Eine PowerPoint-Präsentation aus JSON und einer Vorlage generieren

Ihre Zahlen sind JSON, die Folien sind eine PowerPoint-Vorlage, die Ihr Team pflegt. XGenerate befüllt heute Word-Vorlagen aus dem Fields-Envelope; PowerPoint-Vorlagen mit denselben benannten Platzhaltern werden als Teil Ihrer Integration geliefert, sodass dieselbe Anfrage die Folien befüllt und die Präsentation als PPTX oder PDF zurückkommt.

Warum die Präsentation nicht im Code bauen

  • Eine Folienbibliothek macht jedes Layout zur Programmieraufgabe; wer die Präsentation verantwortet, kann ohne Entwickler keinen Kasten verschieben.
  • PowerPoint auf einem Server zu automatisieren bringt eine Office-Installation in Ihr Deployment und ist für den unbeaufsichtigten Betrieb nicht unterstützt.
  • Monatsberichte, Angebotspräsentationen und Board-Unterlagen wiederholen dieselben Folien mit neuen Zahlen; das Kopieren von Hand ist die Fehlerquelle.

Die Anfrage

Die heutige API befüllt Word-Vorlagen: ein MERGEFIELD pro Wert, ein TableStart-Bereich pro wiederholter Tabelle, PDF oder DOCX zurück. PowerPoint-Vorlagen werden als Teil Ihrer Integration an denselben Envelope gebunden (verfolgt als xgenerateio/xgenerate#366); heute gibt es weder eine PPTX-Ausgabe noch einen Präsentations-Endpunkt, daher zeigt das Beispiel den Word-Vorlagen-Aufruf, wie er existiert.

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.

Aus .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);

Die Antwort

Der Multipart-Aufruf streamt das PDF als Rohbytes zurück; der JSON-Transport liefert filename, content, format und warnings. Warnungen nennen Bild-, QR- und Briefkopf-Platzhalter ohne Wert; Seriendruckfelder und Bereiche ohne Daten werden ohne Warnung entfernt. Die Anfrage gelingt in beiden Fällen.

Was XGenerate nicht tut

PPTX ist heute kein Ausgabeformat der API: format ist PDF oder DOCX, Vorlagen sind Word-Dateien, und einen Präsentations-Endpunkt gibt es nicht. Die Unterstützung von PowerPoint-Vorlagen, zuerst Text- und Tabellenplatzhalter, Diagramme zunächst ausgenommen, wird als Teil Ihrer Integration gebaut und als xgenerateio/xgenerate#366 verfolgt. Bestehende Präsentationen werden nicht konvertiert; eine Vorlage wird einmal gebunden und dann pro Anfrage befüllt.

Testen Sie es mit Ihrer eigenen Vorlage

Schicken Sie uns eine Word-Datei, die Sie heute verwenden. Wir rendern sie mit Ihren Daten und senden das PDF zusammen mit der angepassten Vorlage zurück — Ihre Evaluation muss nicht auf uns warten.

Demo anfragen

Verwandte Leitfäden