Preview a file
curl -H "X-Api-Key: $KEY" -F template=@invoice.docx -F 'data=<invoice.json' \ -F width=400 http://localhost:9027/v1/templates/preview -o page.pngimport { openAsBlob } from 'node:fs';import { readFile, writeFile } from 'node:fs/promises';
const form = new FormData();form.append('template', await openAsBlob('invoice.docx'), 'invoice.docx');form.append('data', await readFile('invoice.json', 'utf8'));form.append('width', '400');
const response = await fetch('http://localhost:9027/v1/templates/preview', { method: 'POST', headers: { 'X-Api-Key': process.env.KEY }, body: form,});if (!response.ok) throw new Error(await response.text());await writeFile('page.png', Buffer.from(await response.arrayBuffer()));import osfrom pathlib import Path
import requests
response = requests.post( "http://localhost:9027/v1/templates/preview", headers={"X-Api-Key": os.environ["KEY"]}, files=[("template", open("invoice.docx", "rb"))], data={"data": Path("invoice.json").read_text(), "width": "400"},)response.raise_for_status()Path("page.png").write_bytes(response.content)package main
import ( "bytes" "io" "log" "mime/multipart" "net/http" "os" "path/filepath")
func main() { var body bytes.Buffer form := multipart.NewWriter(&body) attach(form, "template", "invoice.docx") data, err := os.ReadFile("invoice.json") if err != nil { log.Fatal(err) } form.WriteField("data", string(data)) form.WriteField("width", "400") form.Close()
request, err := http.NewRequest("POST", "http://localhost:9027/v1/templates/preview", &body) if err != nil { log.Fatal(err) } request.Header.Set("X-Api-Key", os.Getenv("KEY")) request.Header.Set("Content-Type", form.FormDataContentType())
response, err := http.DefaultClient.Do(request) if err != nil { log.Fatal(err) } defer response.Body.Close() if response.StatusCode >= 300 { message, _ := io.ReadAll(response.Body) log.Fatalf("%s: %s", response.Status, message) }
out, err := os.Create("page.png") if err != nil { log.Fatal(err) } defer out.Close() if _, err := io.Copy(out, response.Body); err != nil { log.Fatal(err) }}
// attach adds the file at path to the form as the named field.func attach(form *multipart.Writer, field, path string) { file, err := os.Open(path) if err != nil { log.Fatal(err) } defer file.Close() part, err := form.CreateFormFile(field, filepath.Base(path)) if err != nil { log.Fatal(err) } if _, err := io.Copy(part, file); err != nil { log.Fatal(err) }}Renders a template sent as a file with sample data and draws one page as a
PNG, as POST /v1/templates/{id}/preview does for a stored one, without
storing it. Needs no store. The page count is in X-Page-Count.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”The form POST /v1/templates/preview takes: the fields of
[PreviewForm], and the template as a file.
object
Visible as ctx, as JSON text.
Sample data the template sees as its root, as JSON text.
Draw at this resolution, from 18 to 300, as large as the page is. An image may not pass 4000 pixels on a side.
What turns HTML into PDF: fulgur (default) or libreoffice.
The page to draw, from 1. Default 1.
The template: Office, text, HTML or a PDF form.
The image’s width in pixels, from 16 to 2000; the height follows the
page. Default 800. Send this or dpi.
Responses
Section titled “Responses”The page as a PNG
The file, as bytes.
Headers
Section titled “Headers”How many pages the rendered document has
The request is wrong, has no template file, or the page does not exist
The JSON body of every error response.
object
A stable, machine-readable kind.
What went wrong, for a person.
Example
{ "error": "invalid_request", "message": "unknown step 'teleport'"}The template failed to render
The JSON body of every error response.
object
A stable, machine-readable kind.
What went wrong, for a person.
Example
{ "error": "invalid_request", "message": "unknown step 'teleport'"}Pdftoppm or LibreOffice is unavailable, or the request timed out
The JSON body of every error response.
object
A stable, machine-readable kind.
What went wrong, for a person.
Example
{ "error": "invalid_request", "message": "unknown step 'teleport'"}