HTML to PDF API比較 2026年版:主要サービスを徹底比較【コード付き】
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生成を体験できます。
関連リンク
- wkhtmltopdf vs Chromium:エンジンの選び方ガイド — エンジンの違いをさらに深掘り
- PuppeteerからPDF APIへの移行ガイド — Puppeteerから移行する手順
- PDF生成APIクイックスタート — Node.js/Python/PHPですぐ始める
- PDF API料金比較 2026年版 — 主要サービスのコスト比較
- PDFテンプレートエンジン入門 — テンプレートを使った動的PDF生成
- PDF APIエラーハンドリング完全ガイド — 本番運用に必須のエラー処理
- PDF API本番運用チェックリスト — 導入から運用までの全体像
- 請求書PDFの自動生成 — APIを使った請求書自動化の実践例
- FUNBREW PDF ドキュメント — API仕様とクイックスタート
- Playground — ブラウザでPDF生成を試す