Preview a template
curl -H "X-Api-Key: $KEY" -F 'data=<invoice.json' -F width=400 \ "http://localhost:9027/v1/templates/$ID/preview" -o page.pngimport { readFile, writeFile } from 'node:fs/promises';
const form = new FormData();form.append('data', await readFile('invoice.json', 'utf8'));form.append('width', '400');
const response = await fetch(`http://localhost:9027/v1/templates/${process.env.ID}/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
# A (None, value) pair sends a plain field in a multipart form.response = requests.post( f"http://localhost:9027/v1/templates/{os.environ['ID']}/preview", headers={"X-Api-Key": os.environ["KEY"]}, files={"data": (None, Path("invoice.json").read_text()), "width": (None, "400")},)response.raise_for_status()Path("page.png").write_bytes(response.content)package main
import ( "bytes" "io" "log" "mime/multipart" "net/http" "os")
func main() { var body bytes.Buffer form := multipart.NewWriter(&body) data, err := os.ReadFile("invoice.json") if err != nil { log.Fatal(err) } form.WriteField("data", string(data)) form.WriteField("width", "400") form.Close()
url := "http://localhost:9027/v1/templates/" + os.Getenv("ID") + "/preview" request, err := http.NewRequest("POST", url, &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) }}curl -H "X-Api-Key: $KEY" -H "Content-Type: application/json" \ -d '{"data":{"customer":{"name":"Ada"}},"width":400}' \ "http://localhost:9027/v1/templates/$ID/preview" -o page.pngimport { writeFile } from 'node:fs/promises';
const response = await fetch(`http://localhost:9027/v1/templates/${process.env.ID}/preview`, { method: 'POST', headers: { 'X-Api-Key': process.env.KEY, 'Content-Type': 'application/json', }, body: JSON.stringify({ data: { customer: { name: 'Ada' } }, width: 400 }),});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( f"http://localhost:9027/v1/templates/{os.environ['ID']}/preview", headers={"X-Api-Key": os.environ["KEY"]}, json={"data": {"customer": {"name": "Ada"}}, "width": 400},)response.raise_for_status()Path("page.png").write_bytes(response.content)package main
import ( "io" "log" "net/http" "os" "strings")
func main() { body := strings.NewReader(`{"data":{"customer":{"name":"Ada"}},"width":400}`)
url := "http://localhost:9027/v1/templates/" + os.Getenv("ID") + "/preview" request, err := http.NewRequest("POST", url, body) if err != nil { log.Fatal(err) } request.Header.Set("X-Api-Key", os.Getenv("KEY")) request.Header.Set("Content-Type", "application/json")
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) }}Renders a stored template with sample data and draws one page as a PNG,
for checking a template without opening the document. Office templates
convert with LibreOffice, HTML with its HTML engine, and PDF forms are filled;
poppler’s pdftoppm draws the page. The page count is in X-Page-Count.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”The template’s id, or an alias as name or name@version
Request Bodyrequired
Section titled “Request Bodyrequired”The fields POST /v1/templates/{id}/preview accepts, as JSON or as a
multipart form.
object
Visible as ctx.
Sample data the template sees as its root.
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 image’s width in pixels, from 16 to 2000; the height follows the
page. Default 800. Send this or dpi.
The fields POST /v1/templates/{id}/preview accepts, as JSON or as a
multipart form.
object
Visible as ctx.
Sample data the template sees as its root.
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 image’s width in pixels, from 16 to 2000; the height follows the
page. Default 800. Send this or dpi.
Example generated
{ "ctx": "example", "data": "example", "dpi": 1, "htmlEngine": "example", "page": 1, "width": 1}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, 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'"}This caller has no such template
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'"}RUSTICDOC_STORE is not set
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'"}