
Official SDKs in 4 languages. Each one ships with typed models, streaming download support, and a dedicated guide with runnable code for the most common PDF jobs.
import fs from 'fs'
import Anvil from '@anvilco/anvil'
// Your API key from your Anvil organization settings
const apiKey = process.env.ANVIL_API_KEY ?? ''
async function generateMarkdownPDF () {
const anvilClient = new Anvil({ apiKey })
const { statusCode, data, errors } = await anvilClient.generatePDF({
title: 'Example Invoice',
data: [{
label: 'Name',
content: 'Sally Jones',
}, {
content: 'Lorem **ipsum** dolor sit _amet_, consectetur ' +
'adipiscing elit, sed ' +
'[do eiusmod](https://www.useanvil.com/docs) tempor ' +
'incididunt ut labore et dolore magna aliqua.\n\n' +
'* Sagittis eu volutpat odio facilisis.\n\n' +
'* Erat nam at lectus urna.',
}, {
table: {
firstRowHeaders: true,
rows: [
['Description', 'Quantity', 'Price'],
['4x Large Widgets', '4', '$40.00'],
['10x Medium Sized Widgets in dark blue', '10', '$100.00'],
['10x Small Widgets in white', '6', '$60.00'],
],
},
}],
})
if (statusCode === 200 && data) {
// `data` is the generated PDF binary; save it with no encoding or the
// file will be corrupt
fs.writeFileSync(
'generate-markdown-output.pdf', data, { encoding: null }
)
console.log('Generated PDF saved to generate-markdown-output.pdf')
} else {
console.log(
'Error generating PDF:', statusCode, JSON.stringify(errors, null, 2)
)
}
}
generateMarkdownPDF().catch((error) => {
console.error(error)
process.exit(1)
})
Yes. POST Markdown to the same /api/v1/generate-pdf endpoint. Anvil applies a default theme, or you can pass your own CSS.
Yes. Reference custom fonts via @font-face. Per Anvil's PDF generation docs, only TTF format is supported at this time (OTF and WOFF are not yet supported).
Yes. Standard CSS paged-media properties are supported, including helpers for page numbers and fixed-margin content.
Anvil is API-first and bundles PDF filling, PDF generation, Etch e-sign, and Webforms in one platform. DocRaptor is an HTML-to-PDF (and Excel) conversion API built on PrinceXML. PandaDoc is a document management platform with an API focused on proposals, contracts, and e-signatures. Puppeteer is an open-source Node.js library for headless-browser automation that you self-host.
Anvil is more than a PDF tool. We specialize in helping product teams build custom paperwork solutions using these building blocks: PDF services, E-signatures, and Webforms.
Anvil Workflows tie all these building blocks together, automating your paperwork and saving your team time and resources.

Anvil uses digital certificates, specifically the industry-standard Public Key Infrastructure (PKI) framework, for identity verification in document signing. This involves creating a pair of certificates – public and private. Read more