Appearance
Modern Letter
A minimalist modern letter with recipient and sender address, and signature.
![]()
Key Features
This template uses data to populate key fields and markdown for the letter body. It uses two page layouts for the first and subsequent pages, and includes a signature in a cursive script. The signature font size is set automatically using font-size='fit'.
Template Source
Copy and paste this source into the Papermill editor to preview the template.
Details
xml
<press>
<document format="a4">
<page page-margin="48pt">
<frame right="48pt" top="0" max-width="200pt" v-align="bottom">
<grid height="150pt">
<row>
<cell width="10pt" padding="0pt" h-align="center">
<frame height="48pt" width="1pt" background-color="black" padding-bottom="8pt" />
</cell>
<cell />
</row>
<row>
<cell v-align="center">
<icon src="{{ data.icons.phone }}" />
</cell>
<cell>
<frame height="12pt" font-size-max="9pt" font-size="fit" font-size-min="6pt" v-align="center">
{{ data.sender.phone }}
</frame>
</cell>
</row>
<row>
<cell v-align="center">
<icon src="{{ data.icons.envelope }}" />
</cell>
<cell>
<frame height="12pt" font-size-max="10pt" font-size="fit" font-size-min="6pt" v-align="center">
{{ data.sender.email }}
</frame>
</cell>
</row>
<row>
<cell v-align="center">
<icon src="{{ data.icons.globe }}" />
</cell>
<cell>
<frame height="12pt" font-size-max="9pt" font-size="fit" font-size-min="6pt" v-align="center">
{{ data.sender.website }}
</frame>
</cell>
</row>
<row>
<cell>
<icon src="{{ data.icons.location }}" />
</cell>
<cell font="Raleway" font-weight="semibold">
<frame height="24pt" font-size-max="9pt" font-size="fit" font-size-min="6pt" overflow="ellipsis" v-align="center">
{{ data.sender.address }}
</frame>
</cell>
</row>
</grid>
<grid space-before-desired="55pt">
<row>
<cell h-align="center">
<frame margin-left="4pt" height="42pt" width="1pt" background-color="black" />
</cell>
<cell v-align="center">
<frame padding-left="8pt">
<frame margin-bottom="10pt" font-style="bold">DATE</frame>
<frame>{{ data.date.day }} / {{ data.date.month }} / {{ data.date.year }}</frame>
</frame>
</cell>
</row>
</grid>
</frame>
<frame width="188pt" space-after-desired="64pt" height="96pt" v-align="bottom" padding-top="4pt">
<frame height="fill" font-size-max="34pt" font-size-min="26pt" font-size="fit" font-color="black">{{ data.title }}</frame>
<frame font-size="10pt" wrap="none">{{ data.subtitle }}</frame>
</frame>
<frame direction="row" v-align="center" space-after-desired="48pt">
<frame width="368pt">
<frame font-style="bold" padding-bottom="14pt">TO</frame>
<frame padding-bottom="14pt" wrap="none">
<b>{{ data.recipient.name }}</b><br />
{{ data.recipient.role }}
</frame>
<frame wrap="none">
{{ data.recipient.company }}<br />
{{ data.recipient.address }}
</frame>
</frame>
</frame>
<frame>
<flow name="body" />
<flow name="signature" />
</frame>
</page>
<page page-margin="48pt" repeat="true" flow="signature">
<flow name="body" />
<flow name="signature" />
</page>
</document>
<components>
<icon as="img" width="9pt" />
<signature direction="row" width="100%" space-before-desired="18pt" font-size="9pt" break="never">
<frame width="fill">
<frame space-after-desired="18pt">Yours sincerely,</frame>
<frame height="30pt" font-size="fit" font-size-max="20pt" font-size-min="12pt" padding-left="4pt" padding-right="4pt" font="Alex Brush"
style="border-color=black; border-weight-bottom=0.5pt" padding="0pt">
{{ data.sender.signature }}
</frame>
<frame padding-top="8pt">
<frame padding-bottom="2pt" wrap="none">{{ data.sender.name }}</frame>
<frame padding-bottom="2pt" wrap="none">{{ data.sender.position }}</frame>
<frame wrap="none">{{ data.sender.company }}</frame>
</frame>
</frame>
</signature>
</components>
<flows>
<body type="markdown">
# DEAR MR WHITFIELD
Following our meeting on 18th February, I am pleased to enclose our proposal for the operational review we discussed for the Henley Industries portfolio.
**Phase 1 — Discovery & Assessment** (4 weeks) A review of current operating practices across the three regional sites, including stakeholder interviews, process mapping, and a benchmarking pack against four sector peers.
**Phase 2 — Strategy & Recommendations** (3 weeks) A prioritised improvement roadmap with cost-benefit analysis, supported by a 30/60/90-day implementation plan and a RACI matrix.
**Phase 3 — Implementation Support** (8 weeks) Hands-on support during rollout, including weekly steering committee meetings, training, and a post-implementation review benchmarking outcomes against the agreed KPIs.
The total engagement fee is £48,000 plus VAT, payable in three instalments aligned to phase completion. Expenses incurred during the engagement, including travel and accommodation, will be recharged at cost with prior written approval. This proposal remains valid for 60 days from the date of this letter.
We would be delighted to discuss any aspect of the proposal at your convenience. If acceptable, please return a signed copy of this letter by 18th March to confirm the engagement.
</body>
<signature>
<signature />
</signature>
</flows>
<styles>
<document>
<font>Raleway</font>
<font-size>9pt</font-size>
<font-color>text</font-color>
<text-align>left</text-align>
</document>
<p>
<font-size>9pt</font-size>
<line-height>1.6</line-height>
<hyphens>true</hyphens>
<text-align>left</text-align>
<space-before-desired>6pt</space-before-desired>
<space-after-desired>6pt</space-after-desired>
<child name="strong">
<font-weight>bold</font-weight>
<font-color>text-black</font-color>
</child>
<child name="em">
<font-style>italic</font-style>
</child>
</p>
<h1>
<font-size>14pt</font-size>
<font-color>text-black</font-color>
<font-weight>bold</font-weight>
<space-before-desired>0pt</space-before-desired>
<space-after-desired>10pt</space-after-desired>
</h1>
<h2>
<font-size>11pt</font-size>
<font-color>primary</font-color>
<font-weight>bold</font-weight>
<space-before-desired>14pt</space-before-desired>
<space-after-desired>6pt</space-after-desired>
</h2>
<h3>
<font-size>9pt</font-size>
<font-color>text-black</font-color>
<font-weight>semibold</font-weight>
<case>upper</case>
<tracking>0.08</tracking>
<space-before-desired>10pt</space-before-desired>
<space-after-desired>4pt</space-after-desired>
</h3>
<h4>
<font-size>9pt</font-size>
<font-weight>bold</font-weight>
<font-color>text-black</font-color>
<space-before-desired>8pt</space-before-desired>
<space-after-desired>4pt</space-after-desired>
</h4>
<h5>
<font-size>9pt</font-size>
<font-weight>bold</font-weight>
<font-color>primary</font-color>
<space-before-desired>8pt</space-before-desired>
<space-after-desired>4pt</space-after-desired>
</h5>
<h6>
<font-size>9pt</font-size>
<font-style>italic</font-style>
<font-color>primary</font-color>
<space-before-desired>8pt</space-before-desired>
<space-after-desired>4pt</space-after-desired>
</h6>
<ul>
<padding-left>14pt</padding-left>
<space-before-desired>6pt</space-before-desired>
<space-after-desired>6pt</space-after-desired>
</ul>
<ol>
<padding-left>14pt</padding-left>
<space-before-desired>6pt</space-before-desired>
<space-after-desired>6pt</space-after-desired>
</ol>
<li>
<font-size>9pt</font-size>
<line-height>1.5</line-height>
<space-before-desired>2pt</space-before-desired>
<space-after-desired>2pt</space-after-desired>
<child name="strong">
<font-weight>bold</font-weight>
<font-color>text-black</font-color>
</child>
<child name="em">
<font-style>italic</font-style>
</child>
</li>
<blockquote>
<font-style>italic</font-style>
<font-size>10pt</font-size>
<line-height>1.5</line-height>
<font-color>primary</font-color>
<font-weight>regular</font-weight>
<border-color>accent</border-color>
<border-weight-left>2pt</border-weight-left>
<padding-left>12pt</padding-left>
<padding-top>2pt</padding-top>
<padding-bottom>2pt</padding-bottom>
<space-before-desired>10pt</space-before-desired>
<space-after-desired>10pt</space-after-desired>
<hyphens>false</hyphens>
<text-align>left</text-align>
</blockquote>
<a>
<font-color>accent</font-color>
<text-decoration>underline</text-decoration>
</a>
<img>
<width>fill</width>
<space-before-desired>10pt</space-before-desired>
<space-after-desired>10pt</space-after-desired>
</img>
<hr>
<space-before-desired>6pt</space-before-desired>
<space-after-desired>6pt</space-after-desired>
<color>accent</color>
</hr>
<table>
<width>fill</width>
<space-before-desired>10pt</space-before-desired>
<space-after-desired>10pt</space-after-desired>
</table>
<th>
<background-color>primary</background-color>
<font-color>white</font-color>
<font-weight>bold</font-weight>
<font-size>8pt</font-size>
<case>upper</case>
<tracking>0.05</tracking>
<text-align>left</text-align>
<padding>6pt</padding>
<border-weight>0</border-weight>
</th>
<td>
<font-size>9pt</font-size>
<padding>6pt</padding>
<border-weight>0</border-weight>
<border-bottom-weight>0.5pt</border-bottom-weight>
<border-color>grey</border-color>
</td>
<pre>
<font>Google Sans Code</font>
<font-size>8pt</font-size>
<font-color>grey</font-color>
<background-color>primary</background-color>
<padding>10pt</padding>
<border-radius>4pt</border-radius>
<line-height>1.5</line-height>
<text-align>left</text-align>
<hyphens>false</hyphens>
<width>fill</width>
<space-before-desired>10pt</space-before-desired>
<space-after-desired>10pt</space-after-desired>
<child name="code">
<font-color>grey</font-color>
<background-color>transparent</background-color>
<padding>0</padding>
<font-size>8pt</font-size>
</child>
</pre>
<code>
<font>Google Sans Code</font>
<font-size>9pt</font-size>
<font-color>primary</font-color>
</code>
<alias name="plain-markdown">
<child name="strong">
<font-weight>regular</font-weight>
</child>
<child name="em">
<font-style>normal</font-style>
</child>
</alias>
<cell>
<padding>4pt</padding>
<v-align>center</v-align>
</cell>
</styles>
<assets>
<colors>
<text>#444444</text>
<text-black>#231F20</text-black>
<primary>#143047</primary>
<accent>#2DBA8F</accent>
<grey>#E6E7E9</grey>
</colors>
</assets>
<data type="json">
{
"date": {
"day": "06",
"month": "03",
"year": "2026"
},
"title": "ASHGROVE PARTNERS",
"subtitle": "Operational Strategy & Advisory",
"sender": {
"name": "Catherine Ashgrove",
"company": "Ashgrove Partners LLP",
"signature": "C. Ashgrove",
"position": "Managing Partner",
"phone": "+44 (0)20 7946 0234",
"email": "c.ashgrove@ashgrovepartners.co.uk",
"website": "www.ashgrovepartners.co.uk",
"address": "12 Carter Lane, London, EC4V 5EQ"
},
"recipient": {
"name": "DANIEL WHITFIELD",
"role": "DIRECTOR OF OPERATIONS",
"company": "Henley Industries Ltd",
"address": "55 Old Broad Street, London, EC2M 1RX"
},
"icons": {
"phone": "https://papermill-example-data.web.app/letter-v2/icons/phone-solid-full.svg",
"envelope": "https://papermill-example-data.web.app/letter-v2/icons/envelope-solid-full.svg",
"globe": "https://papermill-example-data.web.app/letter-v2/icons/globe-sharp-light-full.svg",
"location": "https://papermill-example-data.web.app/letter-v2/icons/location-dot-sharp-solid-full.svg"
}
}
</data>
</press>Example Payload
To generate a document, pass in a <press> payload containing markdown for the body flow and a JSON data section.
Details
xml
<press>
<flows>
<body type="markdown">
# DEAR MR CHEN
Following our meeting on 20th February 2026, I am pleased to enclose our
proposal for the provision of consulting services to Bridgewater Holdings
plc, as discussed.
Based on our understanding of your requirements, we propose the following
scope of work:
**Phase 1 — Discovery & Assessment** (4 weeks) A comprehensive review of
your current operational processes, including stakeholder interviews and
documentation of existing workflows.
**Phase 2 — Strategy & Recommendations** (3 weeks) Development of a
detailed improvement plan with prioritised recommendations, cost-benefit
analysis, and an implementation roadmap.
**Phase 3 — Implementation Support** (8 weeks) Hands-on support during the
rollout of agreed changes, including training, progress reporting, and
post-implementation review.
Our team for this engagement will be led by myself, supported by two senior
associates with deep experience in operational transformation within the
financial services and professional services sectors. We will also draw on
specialist input from our technology advisory practice where relevant,
particularly in relation to your planned migration to cloud-based portfolio
management systems.
**Deliverables** will include a comprehensive current-state assessment
report, a prioritised improvement roadmap with indicative timelines, a
detailed implementation plan with RACI matrices, and a post-implementation
review report benchmarking outcomes against agreed KPIs.
**Governance** arrangements will include fortnightly steering committee
meetings with your senior leadership team, weekly progress reports
circulated to all nominated stakeholders, and a dedicated project portal
providing real-time visibility of milestones, risks, and dependencies.
The total fee for the engagement is £45,000 plus VAT, payable in three
instalments aligned to phase completion. A detailed breakdown is attached as
Appendix A. Payment terms are 30 days from the date of each invoice.
Expenses incurred in the course of the engagement, including travel,
accommodation, and third-party specialist fees, will be recharged at cost
with prior written approval.
This proposal remains valid for a period of 60 days from the date of this
letter. We would be delighted to discuss any aspect of this proposal at your
convenience. If the above is acceptable, please sign and return the enclosed
copy of this letter by 20th March 2026 to confirm the engagement.
We look forward to working with you.
</body>
<signature>
<signature />
</signature>
</flows>
<data type="json">
{
"date": {
"day": "06",
"month": "03",
"year": "2026"
},
"title": "NORTHFIELD PARTNERS",
"subtitle": "Consulting Services",
"sender": {
"name": "Sarah Mitchell",
"company": "Northfield Partners Ltd",
"signature": "S. Mitchell",
"position": "Commercial Director",
"phone": "+44 (0)161 496 3200",
"email": "s.mitchell@northfieldpartners.co.uk",
"website": "www.northfieldpartners.co.uk",
"address": "18 Deansgate, Manchester, M3 2FJ"
},
"recipient": {
"name": "JAMES CHEN",
"role": "HEAD OF PROCUREMENT",
"email": "james.chen@bridgewaterholdings.co.uk",
"company": "Bridgewater Holdings Plc",
"address": "55 Old Broad Street, London, EC2M 1RX",
"phone": "+44 (0)20 7946 0958"
},
"icons": {
"phone": "https://papermill-example-data.web.app/letter-v2/icons/phone-solid-full.svg",
"envelope": "https://papermill-example-data.web.app/letter-v2/icons/envelope-solid-full.svg",
"globe": "https://papermill-example-data.web.app/letter-v2/icons/globe-sharp-light-full.svg",
"location": "https://papermill-example-data.web.app/letter-v2/icons/location-dot-sharp-solid-full.svg"
}
}
</data>
</press>Generating PDFs
shell
curl -X POST https://api.papermill.io/v2/pdf?template_id=papermill-modern-letter \
-H "Authorization: Bearer $PAPERMILL_API_KEY" \
-H "Content-Type: text/xml" \
-o letter.pdf \
--data-binary @- <<EOF
<insert payload here>
EOFpython
import os
import requests
API_KEY = os.environ["PAPERMILL_API_KEY"]
payload = """
<payload here>
"""
response = requests.post(
"https://api.papermill.io/v2/pdf?template_id=papermill-modern-letter",
headers={
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "text/xml",
},
data=payload.encode("utf-8"),
)
response.raise_for_status()
with open("letter.pdf", "wb") as f:
f.write(response.content)javascript
import fs from 'node:fs/promises'
const API_KEY = process.env.PAPERMILL_API_KEY
const payload = `
<insert payload here>
`
const response = await fetch('https://api.papermill.io/v2/pdf?template_id=papermill-modern-letter', {
method: 'POST',
headers: {
Authorization: `Bearer ${API_KEY}`,
'Content-Type': 'text/xml',
},
body: payload,
})
if (!response.ok) {
throw new Error(`${response.status} ${response.statusText}`)
}
const buffer = Buffer.from(await response.arrayBuffer())
await fs.writeFile('letter.pdf', buffer)Adapt this Template
- Header sender and recipient details can be changed through the
<data>section of the payload. - Signature: is added in the body flow and is optional. To modify the signature, edit the component definition in the main template - you'll find this under
<components>...<signature> - To change the font sizing parameters for the signature, you can edit the signature component. See also auto-scaling with font size fit