From c40a5892e0d5d6ebe64aba7081620ef93063d691 Mon Sep 17 00:00:00 2001 From: JOYCEQL <1449239013@qq.com> Date: Tue, 26 Nov 2024 17:38:33 +0800 Subject: [PATCH] fix: pdf font --- .../fronted/src/app/api/generate-pdf/route.ts | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/apps/fronted/src/app/api/generate-pdf/route.ts b/apps/fronted/src/app/api/generate-pdf/route.ts index a5c6ec4..63fd200 100644 --- a/apps/fronted/src/app/api/generate-pdf/route.ts +++ b/apps/fronted/src/app/api/generate-pdf/route.ts @@ -2,6 +2,8 @@ import { NextResponse } from "next/server"; import puppeteer from "puppeteer-core"; import chrome from "@sparticuz/chromium"; +import path from "path"; +import fs from "fs"; export async function POST(req: Request) { try { @@ -16,8 +18,7 @@ export async function POST(req: Request) { ...chrome.args, "--no-sandbox", "--disable-setuid-sandbox", - "--font-render-hinting=none", - "--disable-web-security" + "--font-render-hinting=none" ], // defaultViewport: chrome.defaultViewport, executablePath: await chrome.executablePath( @@ -27,17 +28,15 @@ export async function POST(req: Request) { }); const page = await browser.newPage(); + const fontPath = path.join(process.cwd(), "fonts", "NotoSansSC.ttf"); + const fontBuffer = fs.readFileSync(fontPath); + + await page.evaluate(async (fontBuffer) => { + const font = new FontFace("Noto Sans SC", fontBuffer); + await font.load(); + document.fonts.add(font); + }, fontBuffer); - await page.addStyleTag({ - content: ` - @font-face { - font-family: 'Noto Sans SC'; - src: url('/fonts/NotoSansSC.woff'); - font-weight: normal; - font-style: normal; - } - ` - }); await page.setContent(content); await page.evaluate(() => document.fonts.ready);