From 3bc671c4e6619c47ce81501ad3155984b5a1be79 Mon Sep 17 00:00:00 2001
From: JOYCEQL <1449239013@qq.com>
Date: Tue, 26 Nov 2024 12:26:07 +0800
Subject: [PATCH] test: export pdf
---
apps/fronted/package.json | 1 +
.../fronted/src/app/api/generate-pdf/route.ts | 27 ++++----------
apps/fronted/src/components/PdfExport.tsx | 9 +++++
.../src/components/editor/SidePanel.tsx | 2 +-
.../src/components/preview/PreviewPanel.tsx | 5 +--
apps/fronted/src/store/useResumeStore.ts | 2 +-
apps/fronted/vercel.json | 8 ++++
pnpm-lock.yaml | 37 +++++++++++++++----
8 files changed, 59 insertions(+), 32 deletions(-)
create mode 100644 apps/fronted/vercel.json
diff --git a/apps/fronted/package.json b/apps/fronted/package.json
index c3885e3..17b5444 100644
--- a/apps/fronted/package.json
+++ b/apps/fronted/package.json
@@ -33,6 +33,7 @@
"@tiptap/pm": "^2.4.0",
"@tiptap/react": "^2.4.0",
"@tiptap/starter-kit": "^2.4.0",
+ "chrome-aws-lambda": "^10.1.0",
"class-variance-authority": "^0.7.0",
"clsx": "^2.1.1",
"cmdk": "1.0.0",
diff --git a/apps/fronted/src/app/api/generate-pdf/route.ts b/apps/fronted/src/app/api/generate-pdf/route.ts
index b18f802..27e0642 100644
--- a/apps/fronted/src/app/api/generate-pdf/route.ts
+++ b/apps/fronted/src/app/api/generate-pdf/route.ts
@@ -1,9 +1,7 @@
// import puppeteer from "puppeteer";
import { NextResponse } from "next/server";
import puppeteer from "puppeteer-core";
-import chrome from "@sparticuz/chromium";
-import path from "path";
-import fs from "fs";
+import chrome from "chrome-aws-lambda";
export async function POST(req: Request) {
try {
@@ -21,36 +19,25 @@ export async function POST(req: Request) {
"--font-render-hinting=none"
],
// defaultViewport: chrome.defaultViewport,
- executablePath: await chrome.executablePath(
- `https://github.com/Sparticuz/chromium/releases/download/v126.0.0/chromium-v126.0.0-pack.tar`
- ),
+ // executablePath: await chrome.executablePath(
+ // `https://github.com/Sparticuz/chromium/releases/download/v126.0.0/chromium-v126.0.0-pack.tar`
+ // ),
+ executablePath: await chrome.executablePath,
headless: chrome.headless
});
const page = await browser.newPage();
- const fontPath = path.join(
- process.cwd(),
- "public",
- "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.setContent(content);
- await page.evaluate(() => document.fonts.ready);
+ await page.waitForFunction("document.fonts.ready");
const marginPx = margin + "px";
const pdf = await page.pdf({
format: "A4",
printBackground: true,
+ waitForFonts: true,
margin: {
top: marginPx,
right: marginPx,
diff --git a/apps/fronted/src/components/PdfExport.tsx b/apps/fronted/src/components/PdfExport.tsx
index 1d709fb..7a7360c 100644
--- a/apps/fronted/src/components/PdfExport.tsx
+++ b/apps/fronted/src/components/PdfExport.tsx
@@ -37,6 +37,15 @@ export function PdfExport() {
const content = `
+
diff --git a/apps/fronted/src/components/editor/SidePanel.tsx b/apps/fronted/src/components/editor/SidePanel.tsx
index 45230d7..dfd4996 100644
--- a/apps/fronted/src/components/editor/SidePanel.tsx
+++ b/apps/fronted/src/components/editor/SidePanel.tsx
@@ -30,7 +30,7 @@ import { useMemo } from "react";
import { Switch } from "../ui/switch";
const fontOptions = [
- { value: "Noto Sans SC", label: "无衬线体" },
+ { value: "sans", label: "无衬线体" },
{ value: "serif", label: "衬线体" },
{ value: "mono", label: "等宽体" }
];
diff --git a/apps/fronted/src/components/preview/PreviewPanel.tsx b/apps/fronted/src/components/preview/PreviewPanel.tsx
index 6a0c67a..651e988 100644
--- a/apps/fronted/src/components/preview/PreviewPanel.tsx
+++ b/apps/fronted/src/components/preview/PreviewPanel.tsx
@@ -264,12 +264,11 @@ export function PreviewPanel() {
"bg-white",
"shadow-lg",
"relative mx-auto",
- // fontFamilyClass,
+ fontFamilyClass,
"text-[#000]"
)}
style={{
- minHeight: "297mm",
- fontFamily: "Noto Sans SC"
+ minHeight: "297mm"
}}
>
= 14.16.0'}
+ chrome-aws-lambda@10.1.0:
+ resolution: {integrity: sha512-NZQVf+J4kqG4sVhRm3WNmOfzY0OtTSm+S8rg77pwePa9RCYHzhnzRs8YvNI6L9tALIW6RpmefWiPURt3vURXcw==}
+ engines: {node: '>= 10.16'}
+ peerDependencies:
+ puppeteer-core: ^10.1.0
+
chrome-trace-event@1.0.3:
resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==}
engines: {node: '>=6.0'}
@@ -3607,6 +3616,13 @@ packages:
resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
engines: {node: '>=6'}
+ lambdafs@2.1.1:
+ resolution: {integrity: sha512-x5k8JcoJWkWLvCVBzrl4pzvkEHSgSBqFjg3Dpsc4AcTMq7oUMym4cL/gRTZ6VM4mUMY+M0dIbQ+V1c1tsqqanQ==}
+ engines: {node: '>= 10.16'}
+ hasBin: true
+ bundledDependencies:
+ - tar-fs
+
language-subtag-registry@0.3.22:
resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==}
@@ -5428,7 +5444,7 @@ snapshots:
'@eslint/eslintrc@2.1.4':
dependencies:
ajv: 6.12.6
- debug: 4.3.4
+ debug: 4.3.7
espree: 9.6.1
globals: 13.24.0
ignore: 5.3.1
@@ -5461,7 +5477,7 @@ snapshots:
'@humanwhocodes/config-array@0.11.14':
dependencies:
'@humanwhocodes/object-schema': 2.0.3
- debug: 4.3.4
+ debug: 4.3.7
minimatch: 3.1.2
transitivePeerDependencies:
- supports-color
@@ -7439,6 +7455,11 @@ snapshots:
dependencies:
readdirp: 4.0.2
+ chrome-aws-lambda@10.1.0(puppeteer-core@23.9.0):
+ dependencies:
+ lambdafs: 2.1.1
+ puppeteer-core: 23.9.0
+
chrome-trace-event@1.0.3: {}
chromium-bidi@0.8.0(devtools-protocol@0.0.1367902):
@@ -7913,10 +7934,10 @@ snapshots:
eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@8.57.0))(eslint@8.57.0):
dependencies:
- debug: 4.3.4
+ debug: 4.3.7
enhanced-resolve: 5.16.1
eslint: 8.57.0
- eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
+ eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0)
eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
fast-glob: 3.3.2
get-tsconfig: 4.7.5
@@ -7928,7 +7949,7 @@ snapshots:
- eslint-import-resolver-webpack
- supports-color
- eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0):
+ eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0):
dependencies:
debug: 3.2.7
optionalDependencies:
@@ -7949,7 +7970,7 @@ snapshots:
doctrine: 2.1.0
eslint: 8.57.0
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
+ eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0)
hasown: 2.0.2
is-core-module: 2.13.1
is-glob: 4.0.3
@@ -9154,6 +9175,8 @@ snapshots:
kleur@3.0.3: {}
+ lambdafs@2.1.1: {}
+
language-subtag-registry@0.3.22: {}
language-tags@1.0.9:
@@ -10284,7 +10307,7 @@ snapshots:
dependencies:
component-emitter: 1.3.1
cookiejar: 2.1.4
- debug: 4.3.4
+ debug: 4.3.7
fast-safe-stringify: 2.1.1
form-data: 4.0.0
formidable: 2.1.2