Guida · API REST

Convertire HTML in DOCX con una chiamata API

Il layout vive nella Sua applicazione come HTML. Invii il documento all'API e riceva un file Word in cui titoli, paragrafi, elenchi e tabelle sono vera formattazione Word, che i Suoi utenti possono continuare a modificare. La stessa chiamata con format=PDF restituisce la versione A4 impaginata.

Perché non costruire il file Word nel codice

  • Una libreria da HTML a Word nel Suo processo La lega a un runtime e a un sottoinsieme di HTML; il servizio successivo, in un altro stack, ricomincia da capo.
  • Convertire tramite Word su un server aggiunge un'installazione di Office al Suo deployment e non è supportato per l'uso non presidiato.
  • Gli utenti vogliono cambiare ciò che la Sua applicazione ha renderizzato: un PDF lo congela, un DOCX glielo restituisce.

La richiesta

Trasporto multipart: l'HTML è la parte html, il formato un semplice valore di form; format=DOCX restituisce il file Word, PDF le pagine impaginate. Una parte watermark opzionale imprime un testo su ogni pagina. Immagini e fogli di stile esterni non vengono mai caricati: incorpori le immagini come data URI.

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 HTML body is the html part; format=DOCX returns the Word file, PDF the paginated pages.
curl -sS https://api.xgenerate.io/v2/documents/generate-from-html \
  -H "Authorization: Bearer $TOKEN" \
  -F "html=@summary.html;type=text/html" \
  -F "format=DOCX" \
  -o summary.docx

Da .NET

using System.Net.Http.Json;

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

// JSON transport: the HTML travels as text. Inline styles and <style> blocks are kept;
// external images and stylesheets are never fetched, so embed images as data URIs.
var html = """
    <style>h1 { color: #1f2937; } td { padding: 4px 8px; }</style>
    <h1>Quarterly summary</h1>
    <p>Revenue grew by <b>12 %</b> against the previous quarter.</p>
    <table>
      <tr><th>Region</th><th>Revenue</th></tr>
      <tr><td>DACH</td><td>CHF 1.2 M</td></tr>
      <tr><td>France</td><td>CHF 0.8 M</td></tr>
    </table>
    """;
var request = new { filename = "summary.html", html, format = "DOCX" };
var response = await http.PostAsJsonAsync(
    "https://api.xgenerate.io/v2/documents/generate-from-html", request);
response.EnsureSuccessStatusCode();

// result.Filename is "summary.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 risposta

La chiamata multipart restituisce il DOCX con Content-Type application/vnd.openxmlformats-officedocument.wordprocessingml.document. Il trasporto JSON restituisce filename, content, format e warnings, con il file codificato in base64 in content. Gli avvisi sono note di rendering, come la sostituzione dei font o un testo di filigrana troncato a 64 caratteri; la richiesta riesce in ogni caso.

Cosa XGenerate non fa

L'HTML viene renderizzato dal motore Word con un sottoinsieme supportato: titoli, paragrafi, formattazione inline, elenchi, tabelle, attributi style inline e blocchi style, immagini come data URI e interruzioni di pagina CSS a livello di paragrafo. Layout CSS complessi e JavaScript non vengono interpretati, le risorse esterne non vengono mai caricate. Per un layout che deve corrispondere a un documento esistente, il template Word è la via.

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

Guide correlate