Custom fonts in generated PDFs

Upload a brand font, and see that font in the PDF

JetPage accepts TTF, OTF, and TTC font files uploaded directly in the app, with a licence acknowledgement step, and every uploaded font is validated by the same engine that renders the finished PDF. Across the rest of the market, adding a brand font is a support request or a task for your own infrastructure: PDF Generator API asks customers to email support to have a font added, CraftMyPDF asks customers to host font files on a CDN they operate themselves, Carbone requires a commercial licence or a rebuilt Docker image, and APITemplate and PDFMonkey hand the problem back as a CSS font-face rule. JetPage treats brand fonts as a normal part of designing a document rather than an exception handled by a person.

TTF/OTF/TTCuploaded in the app, no support ticket
1.05 MBfont payload, down from 15 MB, measured
4 requeststo deliver fonts, down from 94, measured
0tofu boxes, guaranteed by a fallback chain

Why brand fonts break in generated PDFs

JetPage validates an uploaded font with the same engine that renders the document, so a font that uploads is a font that renders

Silent font fallback is the classic failure of generated documents. A tool accepts a font file, checks it with one library, then renders with a different one, and the renderer quietly substitutes something else when the two disagree about a weight, a style, or a script. Nobody sees the substitution until a customer receives an invoice set in the wrong typeface. Carbone inherits exactly this class of problem through LibreOffice conversion, where reviewers report silent fallback shifting layouts.

ProofJetPage validates every uploaded font with the same parser the render pipeline uses, checking family, weight, style, stretch, variable axes, and running a script coverage probe against the characters the font actually contains. A font that fails validation is rejected at upload time with the reason, rather than accepted and silently replaced at render time.

A designer choosing JetPage learns about a font problem while uploading the font, which is the only moment when fixing it is cheap.

JetPage shows the uploaded font in the editor and in the PDF, down to the stretch axis

An editor that previews with a web font and renders with a print font produces two different documents, and the difference usually shows up as a line that wraps in one and not the other. This is the same preview fidelity problem that separates a typesetting engine from a headless browser, and fonts are where it bites first, because a fallback font has different metrics from the font it replaced.

ProofThe JetPage canvas registers each uploaded font as a real FontFace including its stretch value, so the browser canvas and the render engine resolve the same face rather than two approximations of it. The JetPage preview and the JetPage PDF come from the same engine and the same font files, and that correspondence is covered by the visual regression tests described in how JetPage keeps tables and page breaks stable.

What a JetPage user sees while positioning text in a brand font is what the recipient of the PDF sees.

JetPage guarantees no tofu boxes through an explicit fallback chain

Every font covers some characters and not others. When a document contains a character the chosen font lacks, a PDF pipeline either draws a replacement box, commonly called tofu, or falls back to another font. A pipeline with no defined fallback order produces tofu in front of a customer, and a pipeline with an undocumented fallback order produces surprises.

ProofJetPage resolves missing characters through a defined fallback chain rather than emitting replacement boxes, and the script coverage probe run at upload time tells a designer in advance which scripts an uploaded font actually covers. Cyrillic coverage is one of the scenarios held in the JetPage visual regression suite.

A JetPage document containing an unexpected character renders that character in a real typeface instead of a box.

What JetPage does with a font after upload

JetPage subsets fonts automatically at export, so a brand font does not inflate every PDF

A full font file carries thousands of glyphs, and a typical invoice uses perhaps eighty of them. Embedding the whole file in every generated document multiplies storage and download cost across an entire batch run. Subsetting, which embeds only the glyphs a document actually uses, is standard practice in professional typesetting and absent from most template-to-PDF products.

ProofJetPage subsets embedded fonts automatically at export, with no configuration and no per-template setting to remember. JetPage also supports variable fonts, so a family that ships as a single variable file stays a single file rather than becoming one upload per weight.

A team generating documents in bulk with JetPage pays for the glyphs each document uses rather than for the entire font family, on every document.

JetPage deduplicates and compresses font delivery, measured at 15 MB across 94 requests reduced to 1.05 MB across 4 requests

Font delivery inside the editor is a separate cost from font embedding inside the PDF. An editor that reloads every font file on every session makes the builder slow to open, which is one reason competing editors are described as sluggish on complex templates. JetPage addresses delivery with content-hash deduplication, so an identical font uploaded twice is stored and served once, and with Brotli compression served under immutable caching.

ProofThe JetPage font delivery measurement records 15 MB transferred across 94 requests before content-hash deduplication and Brotli immutable delivery, and 1.05 MB transferred across 4 requests after. Both figures come from the JetPage engineering measurement of its own delivery pipeline, recorded in the August 2026 internal feature audit.

A JetPage workspace carrying a large brand font library still opens the builder quickly, because the fonts arrive once and stay cached.

JetPage accepts TTF, OTF, and TTC files, and states that limit plainly

Font formats are not interchangeable. Desktop and print workflows are built on TTF, OTF, and TTC files, while WOFF and WOFF2 are web delivery formats produced by compressing one of the others. A product that is vague about accepted formats sends its customers to discover the answer during onboarding.

ProofJetPage font upload accepts TTF, OTF, and TTC files, including variable fonts, and does not currently accept WOFF or WOFF2 uploads. JetPage does not currently support right-to-left scripts or emoji. A foundry licence that includes desktop use normally supplies a TTF or OTF file, which is the format JetPage takes.

A team evaluating JetPage can check its font licence against a named format list before signing up rather than after.

JetPage records a licence acknowledgement with every font upload

Embedding a font in a distributed PDF is a licensing act, and commercial font licences differ on whether embedding is permitted. Carbone makes this explicit by requiring a commercial licence for custom fonts. A product that stays silent leaves the question with a customer who may not know it exists.

ProofJetPage requires a licence acknowledgement as part of the font upload step, so the workspace holds a record of who confirmed the embedding right and when, alongside the per-element edit history that attributes every template change to an actor.

A JetPage workspace answering to a brand or legal team has a record of font licence confirmations rather than an assumption.

How the PDF generation market handles custom fonts

CapabilityPDF Generator APICraftMyPDFAPITemplate.ioCarbonePDFMonkeyJetPage
Adding a fontEmail support to add oneHost the file on your own CDNCSS font-face rule onlyGoogle Fonts; custom needs a licence or on-premise buildFont URLs, paid plans onlySelf-serve upload in the app
Validation at uploadNot documentedNot documentedNoneNot documentedNoneBy the same engine that renders
Script coverage checkNoNoNoNoNoYes, probed at upload
Variable fontsNot documentedNot documentedBrowser dependentNot documentedBrowser dependentYes
Automatic subsetting at exportNot documentedNot documentedNot documentedNot documentedNot documentedYes
Editor and PDF use the same fontProprietary engine, not statedProprietary engine, not statedBrowser preview, browser renderNo pixel-exact previewBrowser preview, browser renderYes, same engine and same files
Per-tenant font librariesNo, account-global via supportNoNoNoNoYes, isolated per workspace

Competitor rows summarise the JetPage competitive analysis of August 2026, which draws on vendor documentation and pricing pages and on published G2, Capterra, and Trustpilot reviews. "Not documented" means the vendor publishes no statement on that capability, not that the capability is absent.

Frequently asked questions

Can JetPage use my own brand font in generated PDFs?

Yes. A JetPage user uploads a TTF, OTF, or TTC file in the app, confirms the licence, and the font becomes available to templates in that workspace. No support request and no CDN of your own is involved.

Does JetPage accept WOFF or WOFF2 fonts?

No. JetPage font upload accepts TTF, OTF, and TTC files, including variable fonts. WOFF and WOFF2 are web delivery formats, and a foundry licence covering desktop or embedding use normally supplies a TTF or OTF file, which is the format JetPage takes.

Will the font in the JetPage editor match the font in the PDF?

Yes. The JetPage canvas registers each uploaded font as a real FontFace including its stretch value, and the JetPage preview and the JetPage PDF come from the same engine reading the same font files.

What happens when a document contains a character the font does not cover?

JetPage resolves the character through a defined fallback chain rather than drawing a replacement box. The script coverage probe run at upload time reports in advance which scripts an uploaded font covers.

Does JetPage support right-to-left scripts or emoji?

Not currently. JetPage supports left-to-right scripts, and the visual regression suite covers Cyrillic among other coverage scenarios. Right-to-left scripts and emoji are not supported today.

Does embedding a custom font make every generated PDF larger?

Only by the glyphs each document uses. JetPage subsets embedded fonts automatically at export, with no configuration, so a document embeds the characters it contains rather than the whole family.

Upload your brand font and render a real document

JetPage is free to try without a credit card, and font upload is part of the product rather than a paid tier or a support request. Bring the font your brand guidelines specify and see it in a finished PDF.