13 KiB
PaperJSX JSON Layout Spec — Schema Reference
This document contains the complete input schemas for all PaperJSX document generation tools. Use these schemas to produce valid JSON input.
PPTX Presentation
Tool: generate_presentation
Package: @paperjsx/json-to-pptx
Top-level fields
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
title |
string | yes | — | Presentation title |
author |
string | no | — | Author/presenter name |
company |
string | no | — | Company name |
date |
string | no | — | Presentation date |
slides |
SlideContent[] | yes | — | Array of slides (1–50) |
theme |
enum | no | "corporate" |
"corporate", "modern", "minimal", "dark", "gradient" |
primary_color |
string | no | — | Primary brand color (hex) |
secondary_color |
string | no | — | Secondary accent color (hex) |
logo_url |
string (URL) | no | — | Company logo URL |
format |
enum | no | "pptx" |
"pptx" or "pdf" |
aspect_ratio |
enum | no | "16:9" |
"16:9" or "4:3" |
include_slide_numbers |
boolean | no | true |
Show slide numbers |
include_footer |
boolean | no | true |
Show footer |
Slide types
Each slide has a type field that determines its structure.
"title" — Title slide
| Field | Type | Required | Description |
|---|---|---|---|
type |
"title" |
yes | — |
title |
string | yes | Main title text |
subtitle |
string | no | Subtitle text |
background_image_url |
string (URL) | no | Background image |
"content" — Bullet content slide
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
type |
"content" |
yes | — | — |
heading |
string | yes | — | Slide heading |
bullets |
string[] | yes | — | Bullet points |
image_url |
string (URL) | no | — | Optional image |
image_position |
enum | no | "right" |
"left" or "right" |
"chart" — Chart slide
| Field | Type | Required | Description |
|---|---|---|---|
type |
"chart" |
yes | — |
heading |
string | yes | Slide heading |
chart |
ChartConfig | yes | Chart configuration (see below) |
caption |
string | no | Chart caption or source |
ChartConfig:
| Field | Type | Required | Description |
|---|---|---|---|
type |
enum | yes | "line", "bar", "pie", "area" |
data |
object[] | yes | Array of data points (key-value records) |
x_key |
string | yes | Key for X-axis |
y_keys |
string[] | yes | Keys for Y-axis series |
colors |
string[] | no | Hex colors for each series |
"two_column" — Two-column layout
| Field | Type | Required | Description |
|---|---|---|---|
type |
"two_column" |
yes | — |
heading |
string | yes | Slide heading |
left |
string[] | yes | Left column bullet points |
right |
string[] | yes | Right column bullet points |
left_heading |
string | no | Left column sub-heading |
right_heading |
string | no | Right column sub-heading |
"quote" — Quote slide
| Field | Type | Required | Description |
|---|---|---|---|
type |
"quote" |
yes | — |
quote |
string | yes | Quote text |
attribution |
string | no | Quote source |
background_color |
string | no | Background color (hex) |
"image" — Image slide
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
type |
"image" |
yes | — | — |
heading |
string | no | — | Optional heading |
image_url |
string (URL) | yes | — | Main image URL |
caption |
string | no | — | Image caption |
fit |
enum | no | "contain" |
"contain", "cover", "fill" |
"comparison" — Comparison slide
| Field | Type | Required | Description |
|---|---|---|---|
type |
"comparison" |
yes | — |
heading |
string | yes | Slide heading |
items |
ComparisonItem[] | yes | 2–4 comparison items |
ComparisonItem: { label: string, value: string, highlight?: boolean }
"stats" — Stats/metrics slide
| Field | Type | Required | Description |
|---|---|---|---|
type |
"stats" |
yes | — |
heading |
string | yes | Slide heading |
stats |
StatItem[] | yes | 1–4 stat items |
StatItem: { label: string, value: string, change?: string, trend?: "up" | "down" | "neutral" }
PDF Invoice
Tool: generate_invoice
Package: @paperjsx/json-to-pdf
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
invoice_number |
string | yes | — | Unique invoice ID |
issue_date |
string | yes | — | ISO 8601 (YYYY-MM-DD) |
due_date |
string | yes | — | ISO 8601 (YYYY-MM-DD) |
from |
InvoiceSender | yes | — | Sender info (see below) |
to |
Address | yes | — | Recipient info |
items |
LineItem[] | yes | — | Line items (min: 1) |
currency |
enum | no | "USD" |
ISO 4217 code: USD, EUR, GBP, INR, BRL, AUD, CAD, JPY, CNY, CHF, SGD, HKD |
tax_rate |
number | no | 0 |
Default tax rate (0–100) |
discount_total |
number | no | — | Discount amount |
shipping |
number | no | — | Shipping cost |
notes |
string | no | — | Additional notes/terms |
payment_instructions |
string | no | — | Payment instructions |
purchase_order |
string | no | — | PO number |
theme |
enum | no | — | "corporate", "modern", "minimal", "academic", "legal" |
InvoiceSender extends Address with: logo_url?: string (URL)
Address: { name, address_line_1, address_line_2?, city, state?, postal_code, country, email?, phone?, tax_id? }
LineItem: { description: string, quantity: number, unit_price: number, tax_rate?: number (0–100), discount?: number (0–100) }
PDF Report
Tool: generate_report
Package: @paperjsx/json-to-pdf
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
title |
string | yes | — | Report title |
subtitle |
string | no | — | Subtitle |
author |
string | no | — | Author name |
date |
string | no | — | ISO 8601 (YYYY-MM-DD) |
version |
string | no | — | e.g. "v1.0", "Draft" |
content |
string | yes | — | Full markdown content |
include_toc |
boolean | no | true |
Auto-generate table of contents |
include_cover |
boolean | no | true |
Generate cover page |
page_numbers |
boolean | no | true |
Show page numbers |
toc_depth |
number | no | 3 |
Max heading level in TOC (1–6) |
theme |
enum | no | — | "corporate", "modern", "minimal", "academic", "legal" |
primary_color |
string | no | — | Hex color for headings |
font_family |
enum | no | "sans" |
"sans", "serif", "mono" |
page_format |
enum | no | "a4" |
"a4", "letter", "legal" |
orientation |
enum | no | "portrait" |
"portrait", "landscape" |
header_logo_url |
string (URL) | no | — | Logo for header |
footer_text |
string | no | — | Footer text |
Markdown content supports: headings (#–######), GFM tables, fenced code blocks, images via URL, bullet/numbered lists, blockquotes, bold/italic/strikethrough, horizontal rules, links.
PDF Chart Document
Tool: generate_chart_document
Package: @paperjsx/json-to-pdf
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
title |
string | yes | — | Document title |
subtitle |
string | no | — | Subtitle |
author |
string | no | — | Author name |
date |
string | no | — | ISO 8601 |
charts |
ChartConfig[] | yes | — | 1–4 chart configurations |
analysis_text |
string | no | — | Markdown analysis/commentary |
key_insights |
string[] | no | — | Bullet points of insights |
include_data_table |
boolean | no | false |
Include raw data as table |
theme |
enum | no | — | "corporate", "modern", "minimal", "academic", "legal" |
page_format |
enum | no | "a4" |
"a4", "letter", "legal" |
primary_color |
string | no | — | Hex color for accents |
ChartConfig:
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
type |
enum | yes | — | "line", "bar", "pie", "area", "scatter", "composed" |
title |
string | no | — | Chart title |
data |
object[] | yes | — | Array of data points (key-value records) |
x_key |
string | yes | — | Key for X-axis |
y_keys |
string[] | yes | — | Keys for Y-axis series |
colors |
string[] | no | — | Hex colors for each series |
show_legend |
boolean | no | true |
Show legend |
show_grid |
boolean | no | true |
Show grid lines |
y_axis_label |
string | no | — | Y-axis label |
x_axis_label |
string | no | — | X-axis label |
stacked |
boolean | no | — | Stack bars/areas |
XLSX Spreadsheet
Tool: generate_spreadsheet
Package: @paperjsx/json-to-xlsx
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
document |
SpreadsheetDoc | yes | — | Spreadsheet document JSON |
output_filename |
string | no | — | Safe .xlsx filename (alphanumeric, dots, hyphens, underscores) |
render_options |
object | no | — | `{ deterministic?, large_dataset?, row_chunk_size? (max 100K), string_strategy?: "auto" |
validate_after_render |
boolean | no | true |
Validate output after generation |
attempt_repair_if_needed |
boolean | no | true |
Auto-repair if validation finds issues |
SpreadsheetDoc:
{
"meta": {
"title": "string",
"creator": "string"
},
"sheets": [
{
"name": "Sheet1",
"rows": [
{
"cells": [
{ "value": "string or number or boolean" }
]
}
]
}
]
}
DOCX Report
Tool: generate_report_docx
Package: @paperjsx/json-to-docx
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
title |
string | yes | — | Report title |
subtitle |
string | no | — | Subtitle |
author |
string | no | — | Author name |
date |
string | no | — | YYYY-MM-DD format |
sections |
Section[] | yes | — | Report sections (min: 1) |
include_toc |
boolean | no | true |
Table of contents |
theme |
enum | no | "corporate" |
"corporate", "modern", "classic", "academic", "minimal" |
page_size |
enum | no | "a4" |
"a4", "letter", "legal" |
orientation |
enum | no | "portrait" |
"portrait", "landscape" |
header_text |
string | no | — | Header text |
footer_text |
string | no | — | Footer text |
include_page_numbers |
boolean | no | true |
Show page numbers |
Section: { heading: string, level?: number (1–4, default 1), content: string, bullets?: string[] }
Content paragraphs are separated by double newlines.
DOCX Contract
Tool: generate_contract_docx
Package: @paperjsx/json-to-docx
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
title |
string | yes | — | Contract title |
effective_date |
string | yes | — | Effective date |
parties |
Party[] | yes | — | Contracting parties (min: 2) |
recitals |
string[] | no | — | WHEREAS clauses/preamble |
clauses |
Clause[] | yes | — | Contract clauses (min: 1) |
signatures |
Signature[] | no | — | Signature blocks |
theme |
enum | no | "classic" |
"corporate", "classic", "academic" |
page_size |
enum | no | "letter" |
"a4", "letter", "legal" |
Party: { name: string, address: string, role: string }
Clause: { number: string, title: string, content: string, subclauses?: [{ label: string, content: string }] }
Signature: { name: string, title: string, party: string }
DOCX Invoice
Tool: generate_invoice_docx
Package: @paperjsx/json-to-docx
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
invoice_number |
string | yes | — | Invoice ID |
date |
string | yes | — | Invoice date |
due_date |
string | yes | — | Payment due date |
sender |
object | yes | — | { name, address, email?, phone?, tax_id? } |
recipient |
object | yes | — | { name, address, email?, tax_id? } |
items |
InvoiceItem[] | yes | — | Line items (min: 1) |
subtotal |
number | yes | — | Subtotal amount |
tax_rate |
number | no | — | Tax rate (decimal, e.g. 0.1 = 10%) |
tax_amount |
number | yes | — | Tax amount |
total |
number | yes | — | Total amount |
currency |
string | no | "USD" |
ISO 4217 code |
notes |
string | no | — | Additional notes |
theme |
enum | no | "corporate" |
"corporate", "modern", "minimal" |
page_size |
enum | no | "a4" |
"a4", "letter" |
InvoiceItem: { description: string, quantity: number, unit_price: number, amount: number }