diff --git a/apps/fronted/package.json b/apps/fronted/package.json index 0d5f701..c3885e3 100644 --- a/apps/fronted/package.json +++ b/apps/fronted/package.json @@ -21,6 +21,7 @@ "@radix-ui/react-switch": "^1.1.1", "@radix-ui/react-tabs": "^1.0.4", "@radix-ui/react-tooltip": "^1.1.2", + "@sparticuz/chromium": "^131.0.0", "@tiptap/extension-bullet-list": "^2.10.2", "@tiptap/extension-color": "^2.4.0", "@tiptap/extension-highlight": "^2.9.1", @@ -43,6 +44,7 @@ "lucide-react": "^0.379.0", "next": "14.2.3", "puppeteer": "^23.9.0", + "puppeteer-core": "^23.9.0", "react": "^18", "react-day-picker": "^8.10.1", "react-dom": "^18", diff --git a/apps/fronted/src/app/api/generate-pdf/route.ts b/apps/fronted/src/app/api/generate-pdf/route.ts index ccb141b..66b937a 100644 --- a/apps/fronted/src/app/api/generate-pdf/route.ts +++ b/apps/fronted/src/app/api/generate-pdf/route.ts @@ -1,11 +1,22 @@ -import puppeteer from "puppeteer"; +// import puppeteer from "puppeteer"; import { NextResponse } from "next/server"; +import puppeteer from "puppeteer-core"; +import chrome from "@sparticuz/chromium"; export async function POST(req: Request) { try { const { content, margin } = await req.json(); + // 客户端环境 + // const browser = await puppeteer.launch({ + // headless: true + // }); + + // 无服务器端 const browser = await puppeteer.launch({ - headless: true + args: chrome.args, + defaultViewport: chrome.defaultViewport, + executablePath: await chrome.executablePath(), + headless: chrome.headless }); const page = await browser.newPage(); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9ae7b1b..77a38d9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -128,6 +128,9 @@ importers: '@radix-ui/react-tooltip': specifier: ^1.1.2 version: 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@sparticuz/chromium': + specifier: ^131.0.0 + version: 131.0.0 '@tiptap/extension-bullet-list': specifier: ^2.10.2 version: 2.10.2(@tiptap/core@2.9.1(@tiptap/pm@2.9.1)) @@ -194,6 +197,9 @@ importers: puppeteer: specifier: ^23.9.0 version: 23.9.0(typescript@5.4.5) + puppeteer-core: + specifier: ^23.9.0 + version: 23.9.0 react: specifier: ^18 version: 18.3.1 @@ -1462,6 +1468,10 @@ packages: '@sinonjs/fake-timers@10.3.0': resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + '@sparticuz/chromium@131.0.0': + resolution: {integrity: sha512-0XkpNOL5HRxSTDNOfmuqQzEa//bQvZvX7hB8+aH5bfo4X4BVA36O72pIjL7voezodRLqfHfOKGDbgOD5BuEeUg==} + engines: {node: '>= 16'} + '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} @@ -2920,6 +2930,15 @@ packages: flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} @@ -5206,7 +5225,7 @@ snapshots: '@babel/traverse': 7.24.5 '@babel/types': 7.24.5 convert-source-map: 2.0.0 - debug: 4.3.4 + debug: 4.3.7 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -5377,7 +5396,7 @@ snapshots: '@babel/helper-split-export-declaration': 7.24.5 '@babel/parser': 7.24.5 '@babel/types': 7.24.5 - debug: 4.3.4 + debug: 4.3.7 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -6477,6 +6496,13 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 + '@sparticuz/chromium@131.0.0': + dependencies: + follow-redirects: 1.15.9 + tar-fs: 3.0.6 + transitivePeerDependencies: + - debug + '@swc/counter@0.1.3': {} '@swc/helpers@0.5.5': @@ -8232,6 +8258,8 @@ snapshots: flatted@3.3.1: {} + follow-redirects@1.15.9: {} + for-each@0.3.3: dependencies: is-callable: 1.2.7 @@ -8704,7 +8732,7 @@ snapshots: '@babel/parser': 7.24.5 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 - semver: 7.6.2 + semver: 7.6.3 transitivePeerDependencies: - supports-color @@ -8716,7 +8744,7 @@ snapshots: istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.3.4 + debug: 4.3.7 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -9192,7 +9220,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.6.2 + semver: 7.6.3 make-error@1.3.6: {}