コンテンツへスキップ
Tutorial

REST API を使用して HTML と Markdown から PDF を生成

| 6 min read

2 つの POST リクエストにより、HTML または Markdown がダウンロード可能な PDF に変換されます。 Puppeteer、Chromium、500MB の依存関係はありません。 請求書、レポート、領収書を 1 秒以内に作成します。

Printed document pages on a desk
Photo by Bank Phrom on Unsplash

アプリが請求書を生成します。 HTML テンプレートがあります。 次に、それを次のように変える必要があります。 ダウンロード可能なPDF。 標準的なアプローチ: Puppeteer をインストールし、ヘッドレス Chromium インスタンスを起動し、 電話する page.pdf()。 これは、印刷関数の依存関係が 300 ~ 500 MB に相当します。

本番ではさらに悪化します。 Chromium では負荷がかかるとメモリ リークが発生します。 Docker イメージは 1 GB を超えて肥大化します。 コールドスタートには 3 ~ 8 秒かかります。 何かのためにブラウザのプロセスプールを維持することになる それは単一の関数呼び出しである必要があります。

もっと短い道があります。 HTML を API に送信すると、PDF が返されます。

1 つの POST リクエストで HTML から PDF へ

/v1/pdf/from-html エンドポイントは HTML 文字列を受け入れ、PDF を返します。 ブラウザーのバイナリ、依存関係、構成はありません。

curl -X POST https://api.botoi.com/v1/pdf/from-html \\
  -H "Content-Type: application/json" \\
  -d '{
    "html": "<h1>Invoice #1042</h1><p>Amount due: $2,450.00</p>"
  }'

応答:

{
  "success": true,
  "data": {
    "url": "https://api.botoi.com/pdfs/f7a2c1e8.pdf",
    "size_bytes": 24576,
    "pages": 1
  }
}

url フィールドは生成された PDF を指します。 それをダウンロードし、ユーザーをそこにリダイレクトします。 または独自の S3 バケットに保存します。 API は、レンダリング、ページネーション、フォントの埋め込みを処理します。

1 つの POST リクエストで PDF にマークダウン

すべてのドキュメントが HTML として始まるわけではありません。 レポート、変更ログ、ドキュメントはマークダウンとして保存されることがよくあります。 の /v1/pdf/from-markdown エンドポイントは、Markdown をスタイル付き PDF に直接変換します。

応答:

表、見出し、太字テキスト、コード ブロック、リストはすべて正しく表示されます。 API はクリーンに適用されます 文字体裁のデフォルトが設定されているため、カスタム CSS を使用しなくても出力が見栄えよく表示されます。

実践例: 請求書の作成

現実的な請求書には、会社ヘッダー、請求先住所、品目テーブル、税金計算、 そして支払い条件。 1 つの API 呼び出しとして送信される完全な請求書は次のとおりです。

この 1 回のリクエストで、Cascade Software のレターヘッドを備えたプロフェッショナルな請求書 PDF が生成されます。 4 つの項目の合計は $2,257.00、8.5% の消費税は $191.85、総計は $2,448.85 となります。 の CSS <style> タグは、フォント、間隔、表の境界線、および 太字の合計行。 フレックスボックス、グリッド、CSS など、ブラウザがサポートする任意の CSS を使用できます。 @page 余白とページサイズのルール。

実践例: Markdown からの四半期レポート

レポートは Markdown に自然に適合します。 プロダクト マネージャー、アナリスト、運用チームはすでに次のことを書いています マークダウンで。 電子メールの配布またはアーカイブのために PDF に変換することは、1 つの API 呼び出しで実行できます。

API は、表、見出し、太字テキスト、および番号付きリストをクリーンな PDF にレンダリングします。 いいえ 中間の HTML ステップを側で実行します。 データベース (Git) から Markdown 文字列を渡します。 リポジトリ、または Notion エクスポート。

実践例: Express での領収書の生成

これは、ユーザーが要求したときにオンデマンドで PDF 領収書を生成する Express ルートです。 過去の注文の場合:

buildReceiptHtml 関数はデータベースから注文データを取得し、 スタイル付きの HTML 文字列。 ルートはそれを Botoi API に送信し、PDF URL を クライアント。 人形遣いはいない。 ファイル システム操作はありません。 一時ディレクトリはありません。

ほのでも同じパターン

Cloudflare Workers または Bun で実行している場合、Hono バージョンはほぼ同じです。

主な違い: Hono は環境変数にアクセスします。 c.env の代わりに process.env。 他はすべて同じままです。 1 つのフェッチ呼び出し、1 つの JSON 応答、 1 つの PDF URL。

比較: API vs Puppeteer vs wkhtmltopdf vs Prince

HTML から PDF への変換に対する 4 つの一般的なアプローチを、本番環境で何が重要であるかについて比較します。

人形遣い ブラウザーを完全に制御できますが、多大な運用コストがかかります。 サーバー上で Chromium を実行し、メモリ制限を管理し、セキュリティにパッチを適用しています。 ブラウザのバイナリの脆弱性。 JavaScript の実行や Cookie が必要な場合にうまく機能します インジェクション、または認証されたページのレンダリング。

wkhtmltopdf Puppeteer よりも軽いですが、非推奨の QtWebKit を使用します エンジン。 CSS サポートは 2015 レベルに留まっています。 フレックスボックスとグリッドが機能しません。 プロジェクトは アクティブなメンテナなしで GitHub にアーカイブされています。

プリンスXML フル CSS ページメディアを使用して最高品質の印刷出力を生成します サポートします。 その代償として、サーバーあたり 3,800 ドルのライセンス料がかかります。 それは出版することに意味がある SaaS アプリで請求書を生成するためのワークフローではありません。

API アプローチ 管理するテンプレート (請求書、請求書、請求書など) から PDF が必要な場合に最適です。 領収書、レポート、契約書など)、任意の認証されたページをレンダリングする必要はありません。 ゼロ セットアップ、メンテナンス不要、予測可能な遅延。

重要なポイント

  • 2 つのエンドポイント、2 つの入力形式。 /v1/pdf/from-html のために CSS を含む完全な HTML。 /v1/pdf/from-markdown マークダウンコンテンツの場合。
  • サーバー側の依存関係はありません。 Puppeteer も Chromium も wkhtmltopdf もありません バイナリ。 どの言語からでも 1 回の HTTP 呼び出し。
  • CSS を完全にサポート。 インライン スタイル、スタイル タグ、フレックスボックス、グリッド、Google フォント、 そして @page メディアクエリはすべて機能します。
  • 無料利用枠をご利用いただけます。 API キーなしで 1 分あたり 5 リクエスト。 有料プラン 運用ワークロードの場合は月額 9 ドルから。
  • 一般的な使用例。 請求書、領収書、報告書、契約書、文書 エクスポート、および電子メールの添付ファイル。

チェックしてください API ドキュメント ページ サイズ、余白、ヘッダー/フッターを含む完全なパラメーターのリファレンスについては、 構成。

FAQ

プログラムで HTML から PDF を生成するにはどうすればよいですか?
HTML 文字列を含む JSON 本文を使用して、POST リクエストを https://api.botoi.com/v1/pdf/from-html に送信します。 API は、base64 でエンコードされた PDF またはダウンロード URL を返します。 ブラウザーのバイナリ、ヘッドレス インスタンス、サーバー側の依存関係は必要ありません。
この API を使用して Markdown を PDF に変換できますか?
はい。 Markdown 文字列を使用して POST リクエストを https://api.botoi.com/v1/pdf/from-markdown に送信します。 API は、Markdown を内部的にスタイル付き HTML にレンダリングし、PDF を返します。 見出し、表、コードブロック、リストをサポートします。
API は HTML 入力での CSS スタイルをサポートしていますか?
はい。 HTML にはインライン スタイル、スタイル タグ、完全な CSS を含めることができます。 レンダリング エンジンは、フレックスボックス、グリッド、Google Fonts リンク経由のカスタム フォント、および余白やページ サイズに関する @page などの印刷固有のメディア クエリをサポートします。
PDF生成APIは無料ですか?
匿名アクセスでは、IP ベースのレート制限により、1 分あたり 5 つのリクエストが許可されます。 API キーやサインアップは必要ありません。 有料プランは月額 9 ドルから始まり、請求書の生成やバッチ レポートなどの運用ワークロードのレート制限がなくなりました。
PDF 生成に関して API を Puppeteer と比較するとどうですか?
Puppeteer では、Chromium (300 ~ 500MB) のインストール、ブラウザ インスタンスの管理、メモリ リークの処理、バージョンの互換性の維持が必要です。 botoi API は、インフラストラクチャを必要としない単一の HTTP 呼び出しです。 セットアップには数時間ではなく数秒かかります。 ほとんどの PDF ユースケース (請求書、レポート、領収書) では、API は操作上のオーバーヘッドなしで必要なものをカバーします。

botoiで開発を始めよう

150以上のAPIエンドポイント。検索、テキスト処理、画像生成、開発者ユーティリティに対応。無料プラン、クレジットカード不要。