diff --git a/src/content/docs/browser-rendering/reference/supported-fonts.mdx b/src/content/docs/browser-rendering/reference/supported-fonts.mdx index 65157f8b8a79ebe..7a7cd7882c82f58 100644 --- a/src/content/docs/browser-rendering/reference/supported-fonts.mdx +++ b/src/content/docs/browser-rendering/reference/supported-fonts.mdx @@ -4,12 +4,17 @@ title: Supported fonts sidebar: order: 3 --- +import { Tabs, TabItem } from "~/components"; -Browser Rendering uses a managed Chromium environment that includes a standard set of fonts. When you generate a screenshot or PDF, text is rendered using the fonts available in this environment. +Browser Rendering uses a managed Chromium environment that includes a standard set of fonts. When you generate a screenshot or PDF, text is rendered using the fonts available in this environment. -If your webpage specifies a font that is not supported yet, Chromium will automatically fall back to a similar supported font. If you would like to use a font that is not currently supported, reach out to us on [Cloudflare Discord](https://discord.cloudflare.com/). +If your webpage specifies a font that is not supported yet, Chromium will automatically fall back to a similar supported font. If you would like to use a font that is not currently supported, you can [add a custom font](/browser-rendering/reference/supported-fonts/#use-your-own-custom-font). -## Generic CSS font family support +## Pre-installed fonts + +The following sections list the fonts available in the Browser Rendering environment. + +### Generic CSS font family support The following generic CSS font families are supported: @@ -19,43 +24,140 @@ The following generic CSS font families are supported: - `cursive` - `fantasy` -## Common system fonts - -- Andale Mono -- Arial -- Arial Black -- Comic Sans MS -- Courier -- Courier New -- Georgia -- Helvetica -- Impact -- Lucida Handwriting -- Times -- Times New Roman -- Trebuchet MS -- Verdana +### Common system fonts + +- Andale Mono +- Arial +- Arial Black +- Comic Sans MS +- Courier +- Courier New +- Georgia +- Helvetica +- Impact +- Lucida Handwriting +- Times +- Times New Roman +- Trebuchet MS +- Verdana - Webdings -## Open source and extended fonts +### Open source and extended fonts -- Bitstream Vera (Serif, Sans, Mono) -- Cyberbit -- DejaVu (Serif, Sans, Mono) -- FreeFont (FreeSerif, FreeSans, FreeMono) -- GFS Neohellenic -- Liberation (Serif, Sans, Mono) -- Open Sans -- Roboto +- Bitstream Vera (Serif, Sans, Mono) +- Cyberbit +- DejaVu (Serif, Sans, Mono) +- FreeFont (FreeSerif, FreeSans, FreeMono) +- GFS Neohellenic +- Liberation (Serif, Sans, Mono) +- Open Sans +- Roboto -## International fonts +### International fonts Browser Rendering includes additional font packages for non-Latin scripts and emoji: -- IPAfont Gothic (Japanese) -- Indic fonts (Devanagari, Bengali, Tamil, and others) -- KACST fonts (Arabic) -- Noto CJK (Chinese, Japanese, Korean) -- Noto Color Emoji -- TLWG Thai fonts -- WenQuanYi Zen Hei (Chinese) +- IPAfont Gothic (Japanese) +- Indic fonts (Devanagari, Bengali, Tamil, and others) +- KACST fonts (Arabic) +- Noto CJK (Chinese, Japanese, Korean) +- Noto Color Emoji +- TLWG Thai fonts +- WenQuanYi Zen Hei (Chinese) + +## Use your own custom font + +If a required font is not pre-installed, you can inject it into the page at render time using `addStyleTag`. This allows you to load fonts from an external URL or embed them directly as a Base64 string. + + +Example with puppeteer and a CDN source: + +```js +const browser = await puppeteer.launch(env.MYBROWSER); +const page = await browser.newPage(); +await page.addStyleTag({ + content: ` + @font-face { + font-family: 'CustomFont'; + src: url('https://your-cdn.com/fonts/MyFont.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + } + + body { + font-family: 'CustomFont', sans-serif; + } + ` +}); +``` + + +Example with puppeteer and a CDN source: + +```ts +const browser = await puppeteer.launch(env.MYBROWSER); +const page = await browser.newPage(); +await page.addStyleTag({ + content: ` + @font-face { + font-family: 'CustomFont'; + src: url('https://your-cdn.com/fonts/MyFont.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + } + + body { + font-family: 'CustomFont', sans-serif; + } + ` +}); +``` + + + + + +Example with playwright and a Base64 encoded data source: + +```js +const browser = await playwright.launch(env.MYBROWSER); +const page = await browser.newPage(); +await page.addStyleTag({ + content: ` + @font-face { + font-family: 'CustomFont'; + src: url('data:font/woff2;base64,') format('woff2'); + font-weight: normal; + font-style: normal; + } + + body { + font-family: 'CustomFont', sans-serif; + } + ` +}); +``` + + +Example with playwright and a Base64 encoded data source: + +```ts +const browser = await puppeteer.launch(env.MYBROWSER); +const page = await browser.newPage(); +await page.addStyleTag({ + content: ` + @font-face { + font-family: 'CustomFont'; + src: url('data:font/woff2;base64,') format('woff2'); + font-weight: normal; + font-style: normal; + } + + body { + font-family: 'CustomFont', sans-serif; + } + ` +}); +``` + +