2026/03/26

HTML to PDF API比較 2026年版:主要サービスを徹底比較【コード付き】

PDF API比較wkhtmltopdfChromiumPuppeteer

HTML to PDF変換は、請求書・レポート・証明書など多くのWebアプリケーションで必要とされる機能です。ブラウザで表示したコンテンツを正確にPDFとして出力するには、適切なツール選びが重要になります。

この記事では、2026年時点で利用可能な主要ツールを実際のコード例付きで比較し、プロジェクトに最適な選択肢を見つけるお手伝いをします。

主要なHTML to PDF変換手段

1. wkhtmltopdf(OSS)

wkhtmltopdfはQtWebKitエンジンをベースにしたコマンドラインツールです。長年使われてきた定番ですが、2023年にアーカイブされメンテナンスが停止しています。

メリット:

  • 無料・オープンソース
  • 軽量で高速(Chromiumベースより少ないリソースで動作)
  • コマンドラインから簡単に使える

デメリット:

  • メンテナンスが停滞(アーカイブ済み)
  • CSS Grid/Flexboxの対応が不完全
  • 最新のWeb標準に追従できない

コード例(CLI)

# 基本的な変換
wkhtmltopdf https://example.com output.pdf

# オプション指定(日本語フォント・余白・ページサイズ)
wkhtmltopdf \
  --encoding utf-8 \
  --page-size A4 \
  --margin-top 20mm \
  --margin-bottom 20mm \
  invoice.html invoice.pdf

wkhtmltopdfは新規プロジェクトでの採用は推奨されません。既存プロジェクトからの移行先としては、Chromiumベースのエンジンを検討してください。

2. Puppeteer / Playwright(OSS)

Headless ChromeをNode.jsから制御するライブラリです。ブラウザ自動化の一機能としてPDF生成が可能で、最新のWeb標準に完全対応しています。

メリット:

  • 最新のCSS/JSに完全対応(CSS Grid、Flexbox、Web Fonts)
  • スクリーンショットも取得可能
  • 大規模なコミュニティとエコシステム

デメリット:

  • Chromeのインストール・バージョン管理が必要
  • メモリ消費が大きい(1プロセスあたり200〜500MB)
  • PDF生成に特化していないため、細かい制御が難しい
  • 並行処理の実装が自前で必要

コード例(Node.js / Puppeteer)

const puppeteer = require('puppeteer');

async function generatePdf() {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  // HTMLを直接指定する場合
  await page.setContent(`
    <html>
      <style>
        body { font-family: 'Noto Sans JP', sans-serif; }
        .invoice-header { display: flex; justify-content: space-between; }
      </style>
      <body>
        <div class="invoice-header">
          <h1>請求書</h1>
          <p>2026年3月</p>
        </div>
        <table>
          <tr><td>サービス利用料</td><td>¥10,000</td></tr>
        </table>
      </body>
    </html>
  `);

  await page.pdf({
    path: 'invoice.pdf',
    format: 'A4',
    margin: { top: '20mm', bottom: '20mm', left: '15mm', right: '15mm' },
    printBackground: true,
  });

  await browser.close();
}

generatePdf();

Puppeteerでのより本格的なPDF生成については、PuppeteerからAPIへの移行ガイドも参考になります。

3. Gotenberg(OSS)

Docker上で動作するPDF生成API。内部でChromiumとLibreOfficeを使用し、RESTful APIでPDF変換を提供します。

メリット:

  • Docker一発で環境構築
  • REST APIで言語を問わず利用可能
  • Chromiumの恩恵をフルに受けられる
  • Word/Excel→PDF変換にも対応

デメリット:

  • Dockerが必須(サーバーレス環境では使いにくい)
  • 自前でのスケーリングが必要
  • エラーハンドリングが限定的
  • 日本語フォントの設定に追加作業が必要

コード例(cURL)

# HTMLファイルをPDFに変換
curl \
  --request POST http://localhost:3000/forms/chromium/convert/html \
  --form files=@index.html \
  --form marginTop=20 \
  --form marginBottom=20 \
  -o output.pdf

# URLを指定してPDFに変換
curl \
  --request POST http://localhost:3000/forms/chromium/convert/url \
  --form url=https://example.com \
  --form paperWidth=8.27 \
  --form paperHeight=11.7 \
  -o output.pdf

4. FUNBREW PDF(SaaS)

REST APIでHTML/URL/テンプレートからPDFを生成するマネージドサービスです。インフラ管理が不要で、APIキーひとつですぐに利用開始できます。

メリット:

  • インフラ管理不要、APIキーだけで即利用開始
  • 2つのエンジン(Fast/Quality)を用途に応じて使い分け可能
  • テンプレートエンジン、Webhook、メール送信まで一体化
  • 日本語フォント完全対応(Noto Sans JP等プリインストール)
  • 自動スケーリングで同時リクエストに対応

デメリット:

コード例(cURL)

curl -X POST https://api.pdf.funbrew.cloud/v1/pdf/from-html \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "html": "<h1>請求書</h1><p>合計: ¥10,000</p>",
    "engine": "quality",
    "format": "A4",
    "margin": {
      "top": "20mm",
      "bottom": "20mm"
    }
  }' \
  -o invoice.pdf

コード例(Node.js)

const response = await fetch('https://api.pdf.funbrew.cloud/v1/pdf/from-html', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    html: '<h1>請求書</h1><p>合計: ¥10,000</p>',
    engine: 'quality',
    format: 'A4',
  }),
});

const pdf = await response.arrayBuffer();
fs.writeFileSync('invoice.pdf', Buffer.from(pdf));

コード例(Python)

import requests

response = requests.post(
    'https://api.pdf.funbrew.cloud/v1/pdf/from-html',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
    json={
        'html': '<h1>請求書</h1><p>合計: ¥10,000</p>',
        'engine': 'quality',
        'format': 'A4',
    },
)

with open('invoice.pdf', 'wb') as f:
    f.write(response.content)

コード例(PHP)

<?php

$apiKey = getenv('FUNBREW_PDF_API_KEY');

$ch = curl_init('https://api.pdf.funbrew.cloud/v1/pdf/from-html');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'html'    => '<h1>請求書</h1><p>合計: ¥10,000</p>',
        'engine'  => 'quality',
        'format'  => 'A4',
        'margin'  => ['top' => '20mm', 'bottom' => '20mm'],
    ]),
    CURLOPT_TIMEOUT => 30,
]);

$pdf = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($httpCode === 200) {
    file_put_contents('invoice.pdf', $pdf);
    echo "PDF生成完了\n";
}

コード例(Gotenberg + Node.js)

const FormData = require('form-data');
const fs = require('fs');
const axios = require('axios');

async function generateWithGotenberg() {
  const form = new FormData();
  form.append('files', fs.createReadStream('invoice.html'), 'index.html');
  form.append('marginTop', '20');
  form.append('marginBottom', '20');

  const response = await axios.post(
    'http://localhost:3000/forms/chromium/convert/html',
    form,
    { headers: form.getHeaders(), responseType: 'arraybuffer' }
  );

  fs.writeFileSync('output.pdf', response.data);
}

generateWithGotenberg();

FUNBREW PDFの詳しい使い方はドキュメントPlaygroundで実際に試せます。請求書の自動生成の実践例もご覧ください。

比較表

機能 wkhtmltopdf Puppeteer Gotenberg FUNBREW PDF
CSS Grid/Flexbox
日本語フォント △ 要設定 ○ 要インストール ○ 要設定 ◎ プリインストール
REST API
テンプレート
Webhook
メール送信
インフラ管理 自前 自前 Docker 不要
スケーリング 自前 自前 自前 自動
無料枠 OSS OSS OSS 30件/月
メンテナンス状況 アーカイブ済 活発 活発 活発

ユースケース別おすすめ

個人開発・プロトタイプ

少量のPDF生成であれば、Puppeteerで手軽に始められます。ただしインフラ管理の手間を考えると、FUNBREW PDFの無料プラン(月30件)も有力な選択肢です。

スタートアップ・中小規模

開発速度を重視するなら、FUNBREW PDFのようなマネージドAPIが最適です。Chromiumのバージョン管理やスケーリングを自前で行う必要がなく、コア機能の開発に集中できます。

大規模・エンタープライズ

月間数万件以上の生成が必要な場合、Gotenbergを自前でスケーリングするか、FUNBREW PDFのエンタープライズプランを検討してください。セキュリティ要件が厳しい場合は、PDF APIのセキュリティ対策も参考になります。

移行のヒント

現在wkhtmltopdfを使っているプロジェクトは、エンジンの選定についてwkhtmltopdf vs Chromium:エンジンの選び方ガイドが参考になります。PuppeteerやPlaywrightからの移行を検討している場合は、セットアップの簡素化とスケーラビリティの面でマネージドAPIへの移行が効果的です。

まとめ

プロジェクトの規模や要件によって最適な選択は異なりますが、2026年時点での傾向は明確です。

  • wkhtmltopdf はメンテナンス停止のため、新規採用は非推奨
  • Puppeteer/Playwright は柔軟だが、運用負荷が高い
  • Gotenberg はDocker環境があれば有力だが、スケーリングは自前
  • FUNBREW PDF はインフラ管理不要で、すぐに本番利用可能

まずは無料プランで試して、実際の使い勝手を確かめてみてください。Playgroundで今すぐブラウザからPDF生成を体験できます。

関連リンク

Powered by FUNBREW PDF