Guida · API REST
Un motore di template DOCX da chiamare, non da installare
Campi unione Word standard, regioni TableStart e TableEnd, segnaposto immagine: il template resta un semplice .docx che chiunque può modificare. Il Suo codice invia file e dati, il motore restituisce il documento finito. Niente da installare, niente Word sul server, nessuna sintassi da imparare.
Cosa Le costa una libreria nel processo
- Una libreria DOCX La lega a un linguaggio e a un runtime; il servizio successivo, in un altro stack, ricomincia da capo.
- Renderizzare documenti con Word su un server richiede di mantenere e aggiornare un'installazione Office oltre all'applicazione.
- I motori con una sintassi propria di segnaposto trasformano ogni template in lavoro da sviluppatore.
La richiesta
La chiamata curl mostra il trasporto multipart; gli esempi .NET, Java e Python qui sotto usano il trasporto JSON (template codificato in base64 in content) o multipart, secondo ciò che è comodo in ciascuno stack. La busta fields è la stessa ovunque.
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)
# The template is a plain .docx with MERGEFIELD placeholders and a TableStart:items region.
curl -sS https://api.xgenerate.io/v2/documents/generate \
-H "Authorization: Bearer $TOKEN" \
-F "file=@contract.docx" \
-F "fields=@fields.json;type=application/json" \
-F "format=PDF" \
-o contract.pdfDa .NET
using System.Net.Http.Json;
using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization = new("Bearer", token);
var request = new
{
filename = "contract.docx",
content = Convert.ToBase64String(await File.ReadAllBytesAsync("contract.docx")),
format = "PDF",
fields = new
{
fields = new[] { new { name = "customer.name", value = "Alpenblick Consulting AG" } }
}
};
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);From Java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Base64;
var template = Base64.getEncoder().encodeToString(Files.readAllBytes(Path.of("contract.docx")));
var body = """
{"filename": "contract.docx", "content": "%s", "format": "PDF",
"fields": {"fields": [{"name": "customer.name", "value": "Alpenblick Consulting AG"}]}}
""".formatted(template);
var request = HttpRequest.newBuilder(URI.create("https://api.xgenerate.io/v2/documents/generate"))
.header("Authorization", "Bearer " + token)
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
var response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
// response.body() holds filename, content (base64), format and warnings:
// parse it with your JSON library and Base64-decode content into contract.pdf.From Python
import requests
token = "..." # client-credentials token from auth.xgenerate.io
with open("contract.docx", "rb") as template, open("fields.json", "rb") as fields:
response = requests.post(
"https://api.xgenerate.io/v2/documents/generate",
headers={"Authorization": f"Bearer {token}"},
files={
"file": ("contract.docx", template),
"fields": ("fields.json", fields, "application/json"),
},
data={"format": "PDF"},
timeout=60,
)
response.raise_for_status()
with open("contract.pdf", "wb") as out:
out.write(response.content)La risposta
Byte grezzi sul trasporto multipart, un oggetto JSON con filename, content, format e warnings sul trasporto JSON. Gli avvisi indicano i segnaposto per immagini, QR e carta intestata rimasti senza valore, oltre a note di rendering come la sostituzione dei font; i campi unione e le regioni senza dati vengono rimossi senza avviso. La richiesta riesce in ogni caso.
Il risultato

Cosa XGenerate non fa
I template usano campi unione Word standard, regioni TableStart / TableEnd e segnaposto immagine tramite testo alternativo. Le espressioni di calcolo vengono valutate tramite un file di binding opzionale o l'API /bindings/evaluate, fuori dal template Word. I blocchi condizionali per valore non sono supportati; i campi IF di Word attorno a un testo sì.
Lo provi sul Suo template
Ci invii un file Word che usa oggi. Lo renderizziamo con i Suoi dati e Le restituiamo il PDF insieme al template adattato, così la Sua valutazione non deve aspettare noi.
Richiedi una demo