HTML から PDF への変換は、Web アプリケーションでは一般的な要件です。このブログ投稿では、Puppeteer を使用して HTML を PDF に変換する Next.js API ルートを作成する方法を検討し、それが Vercel にデプロイされたときに機能することを確認します。
挑戦
Puppeteer は HTML から PDF への変換のための強力なツールですが、Vercel のようなサーバーレス環境に導入する場合には課題が生じます。主な問題は次のとおりです:
- Puppeteer には Vercel のサイズ制限を超える Chromium バイナリが必要です。
- サーバーレス関数の実行時間とリソースには制限があります。
解決策
これらの制限を克服するために、@sparticuz/chromium-min と puppeteer-core を組み合わせて使用します。以下にそのアプローチ方法を示します:
- サーバーレス環境用に設計された最小限の Chromium ビルドを使用します。
- この最小限の Chromium バージョンを使用するように Puppeteer を構成します。
- サーバーレス実行用に PDF 生成プロセスを最適化します。
ステップ 1: プロジェクトのセットアップ
まず、新しい Next.js プロジェクトを作成するか、既存のプロジェクトを使用します。次に、必要な依存関係をインストールします。
npm install @sparticuz/chromium-min puppeteer-core
互換性と最適なパフォーマンスを確保するには、必要なパッケージの正しいバージョンを使用することが重要です。最新のテストの時点では、次のバージョンが推奨されています:
{ "dependencies": { "@sparticuz/chromium-min": "^129.0.0", "puppeteer-core": "^23.5.0" } }
ステップ 2: API ルートの作成
app/api/html-to-pdf/route.js (Next.js 13 アプリ ルーターの場合) または pages/api/html-to-pdf.js (Pages ルーターの場合) に新しいファイルを作成します。コードは次のとおりです:
const chromium = require("@sparticuz/chromium-min"); const puppeteer = require("puppeteer-core"); async function getBrowser() { return puppeteer.launch({ args: [...chromium.args, "--hide-scrollbars", "--disable-web-security"], defaultViewport: chromium.defaultViewport, executablePath: await chromium.executablePath( `https://github.com/Sparticuz/chromium/releases/download/v129.0.0/chromium-v129.0.0-pack.tar` ), headless: chromium.headless, ignoreHTTPSErrors: true }); } export async function POST(request) { try { const { html } = await request.json(); const browser = await getBrowser(); const page = await browser.newPage(); await page.setContent(html, { waitUntil: "networkidle0" }); const pdfBuffer = await page.pdf({ format: "A4", printBackground: true, margin: { top: "1cm", right: "1cm", bottom: "1cm", left: "1cm" } }); await browser.close(); return new Response(pdfBuffer, { headers: { "Content-Type": "application/pdf", "Content-Disposition": 'attachment; filename="output.pdf"' } }); } catch (error) { console.error("Error generating PDF:", error); return new Response(JSON.stringify({ error: "Failed to generate PDF" }), { status: 500, headers: { "Content-Type": "application/json" } }); } }
ステップ 3: コードを理解する
このコードの重要な部分を分析してみましょう:
ブラウザの設定
getBrowser 関数は、最小限の Chromium バイナリを使用して Puppeteer をセットアップします。
async function getBrowser() { return puppeteer.launch({ args: [...chromium.args, "--hide-scrollbars", "--disable-web-security"], defaultViewport: chromium.defaultViewport, executablePath: await chromium.executablePath( `https://github.com/Sparticuz/chromium/releases/download/v129.0.0/chromium-v129.0.0-pack.tar` ), headless: chromium.headless, ignoreHTTPSErrors: true }); }
この構成では、@sparticuz/chromium-min パッケージを使用して、サーバーレス環境と互換性のある最小限の Chromium バイナリを提供します。
PDF の生成
PDF 生成の主なロジックは POST 関数にあります:
- リクエスト本文から HTML を抽出します。
- getBrowser 関数を使用してブラウザ インスタンスを起動します。
- 新しいページを作成し、そのコンテンツを提供された HTML に設定します。
- ページのコンテンツから PDF を生成します。
- ブラウザを閉じてリソースを解放します。
- 適切なヘッダーを含む応答として PDF を返します。
ステップ 4: API の使用
この API を使用するには、リクエスト本文に HTML コンテンツを含む POST リクエストを送信します。
const response = await fetch('/api/html-to-pdf', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ html: '<h1 id="Hello-World">Hello, World!</h1>' }), }); if (response.ok) { const blob = await response.blob(); // Handle the PDF blob (e.g., download or display) }
導入に関する考慮事項
Vercel にデプロイする場合は、次の点に留意してください:
実行時間: Vercel の最大実行時間は、ホビー プランの場合は 10 秒、プロ プランの場合は 60 秒です。これらの制限内に収まるように HTML および PDF の生成プロセスを最適化します。
メモリ使用量: メモリ使用量に注意してください。最小限の Chromium バイナリは役に立ちますが、複雑な PDF では依然として大量のメモリを使用する可能性があります。
コールド スタート: サーバーレス関数でコールド スタートが発生する可能性があります。最初の呼び出しは、Chromium バイナリをダウンロードしてセットアップする必要があるため、時間がかかる可能性があります。
エラー処理: タイムアウトやリソース制約を管理するための堅牢なエラー処理を実装します。
キャッシュ: サーバーレス機能の負荷を軽減するために、頻繁に生成される PDF のキャッシュ戦略の実装を検討してください。
結論
このアプローチでは、Next.js と Puppeteer を使用して、Vercel のサーバーレス環境と互換性のある強力な HTML から PDF への変換 API を作成できます。 @sparticuz/chromium-min と puppeteer-core を活用することで、サーバーレス コンテキストで Puppeteer を実行する際の主な課題を克服しました。
以上がPuppeteer を使用して HTML を PDF に変換する Next.js API を作成する (Vercel 互換)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

PythonまたはJavaScriptの選択は、キャリア開発、学習曲線、エコシステムに基づいている必要があります。1)キャリア開発:Pythonはデータサイエンスとバックエンド開発に適していますが、JavaScriptはフロントエンドおよびフルスタック開発に適しています。 2)学習曲線:Python構文は簡潔で初心者に適しています。 JavaScriptの構文は柔軟です。 3)エコシステム:Pythonには豊富な科学コンピューティングライブラリがあり、JavaScriptには強力なフロントエンドフレームワークがあります。

JavaScriptフレームワークのパワーは、開発を簡素化し、ユーザーエクスペリエンスとアプリケーションのパフォーマンスを向上させることにあります。フレームワークを選択するときは、次のことを検討してください。1。プロジェクトのサイズと複雑さ、2。チームエクスペリエンス、3。エコシステムとコミュニティサポート。

はじめに私はあなたがそれを奇妙に思うかもしれないことを知っています、JavaScript、C、およびブラウザは正確に何をしなければなりませんか?彼らは無関係であるように見えますが、実際、彼らは現代のウェブ開発において非常に重要な役割を果たしています。今日は、これら3つの間の密接なつながりについて説明します。この記事を通して、JavaScriptがブラウザでどのように実行されるか、ブラウザエンジンでのCの役割、およびそれらが協力してWebページのレンダリングと相互作用を駆動する方法を学びます。私たちは皆、JavaScriptとブラウザの関係を知っています。 JavaScriptは、フロントエンド開発のコア言語です。ブラウザで直接実行され、Webページが鮮明で興味深いものになります。なぜJavascrを疑問に思ったことがありますか

node.jsは、主にストリームのおかげで、効率的なI/Oで優れています。 ストリームはデータを段階的に処理し、メモリの過負荷を回避します。大きなファイル、ネットワークタスク、リアルタイムアプリケーションの場合。ストリームとTypeScriptのタイプの安全性を組み合わせることで、パワーが作成されます

PythonとJavaScriptのパフォーマンスと効率の違いは、主に以下に反映されています。1)解釈された言語として、Pythonはゆっくりと実行されますが、開発効率が高く、迅速なプロトタイプ開発に適しています。 2)JavaScriptはブラウザ内の単一のスレッドに限定されていますが、マルチスレッドおよび非同期I/Oを使用してnode.jsのパフォーマンスを改善でき、両方とも実際のプロジェクトで利点があります。

JavaScriptは1995年に発信され、Brandon Ikeによって作成され、言語をCに実現しました。 2。JavaScriptのメモリ管理とパフォーマンスの最適化は、C言語に依存しています。 3. C言語のクロスプラットフォーム機能は、さまざまなオペレーティングシステムでJavaScriptを効率的に実行するのに役立ちます。

JavaScriptはブラウザとnode.js環境で実行され、JavaScriptエンジンに依存してコードを解析および実行します。 1)解析段階で抽象的構文ツリー(AST)を生成します。 2)ASTをコンパイル段階のバイトコードまたはマシンコードに変換します。 3)実行段階でコンパイルされたコードを実行します。

PythonとJavaScriptの将来の傾向には、1。Pythonが科学コンピューティングの分野での位置を統合し、AI、2。JavaScriptはWebテクノロジーの開発を促進します。どちらもそれぞれのフィールドでアプリケーションシナリオを拡大し続け、パフォーマンスをより多くのブレークスルーを行います。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。
