LibPDF.js: パース & サインのための TypeScript PDF ライブラリ
LibPDF.js: 完全な TypeScript PDF ソリューション
JavaScript 環境で PDF を読み込む、編集する、生成する必要があったことがあるなら、ライブラリの迷路を追いかけてきたことでしょう:
- PDF.js はレンダリングに優れていますが、ブラウザを使わざるを得ません。
- pdf‑lib は洗練された API を持っていますが、実際の PDF の変わり種に苦労します。
- pdfkit は PDF を生成できますが、読むことはできません。
そして LibPDF.js が登場です。完全に TypeScript で書かれた、ブラウザとサーバーの両方に対応したモダンな PDF エンジンです。Documenso が設計したオープンソース DocuSign 代替として、他のライブラリでは欠けていた部分を埋めます。Web が投げてくるあらゆる PDF を開き、クリーンな API を提供し、プロダクションで必要となる全機能をサポートします。
LibPDF.js は何をできるのか?
| Feature | Availability | Notes |
|---|---|---|
| 任意の PDF をパース | ✔️ | 許容的パースで不正なファイル、フォールバック復旧、完全な位置データをサポート |
| PDF を作成 | ✔️ | 新規作成または既存ファイルを変更 |
| 暗号化 | ✔️ | RC4, AES‑128, AES‑256 (R2‑R6) |
| デジタル署名 | ✔️ | PAdES B‑B, B‑T, B‑LT, B‑LTA;Google Cloud KMS 統合 |
| フォーム入力 | ✔️ | テキスト、チェックボックス、ラジオ、ドロップダウン、署名 |
| フォームフラット化 | ✔️ | フィールドをページ内容に焼き込み |
| 結合・分割 | ✔️ | ページを結合または抽出 |
| 添付ファイル | ✔️ | ファイルを埋め込み、抽出 |
| テキスト抽出 | ✔️ | 座標付き |
| フォント埋め込み | ✔️ | TTF/OpenType をサブセット化 |
| 画像 | ✔️ | JPEG, PNG (アルファ)、JBIG2 & JPEG2000 通過 |
| 増分保存 | ✔️ | 変更を追記、既存署名を保持 |
なぜ重要なのか – 許容性、クリーンな API、フル機能セットの組み合わせにより、車輪の再発明なしで企業向けの e‑署名・ドキュメント生成ワークフローを構築できます。
インストール & クイックスタート
# npm
npm install @libpdf/core
# bun
bun add @libpdf/core
import { PDF } from \"@libpdf/core\";
// バッファから PDF をロード
const pdf = await PDF.load(fileBytes);
// 単純な読み取り
const pages = pdf.getPages();
console.log(`Document has ${pages.length} pages.`);
// 完全に新しい PDF を作成
const newPdf = PDF.create();
const page = newPdf.addPage({ size: \"letter\" });
page.drawText(\"Hello, World!\", { x: 50, y: 700, fontSize: 24 });
// 署名例
import { P12Signer } from \"@libpdf/core\";
const signer = await P12Signer.create(certificateBytes, \"certPassword\");
const signed = await pdf.sign({ signer, reason: \"I approve this doc\" });
API ハイライト
上位レベル API
PDF– 文書の読み込み、結合、作成、書き込み。PDFPage– 個々のページを操作(テキスト、画像、注釈の描画)。PDFForm– フォームフィールドの読み取り、入力、フラット化。
低レベル API
PdfDict、PdfArray、PdfStream– 原生 PDF 構造を直接操作したい場合のフルコントロール。
他のライブラリと比べて LibPDF.js が優れている理由
| アスペクト | LibPDF.js | PDF.js | pdf‑lib | pdfkit |
|---|---|---|---|---|
| ブラウザまたは Node のサポート | ✔️ (Web Crypto + Node 20+) | ✔️ (レンダラーのみ) | ✔️ | ✔️ |
| 許容的パース | ✔️ | ❌ | ❌ | ❌ |
| デジタル署名 | ✔️ | ❌ | ✅ (基本) | ❌ |
| フォームサポート | ✔️ | ❌ | ❌ | ❌ |
| 増分保存 | ✔️ | ❌ | ❌ | ❌ |
実際の PDF で動作し、スムーズな開発体験を提供するライブラリが必要なら、LibPDF.js が勝ります。
コミュニティ & コントリビューション
リポジトリは GitHub で活発にメンテナンスされ、717 つのスター、19 のフォーク、そして増え続けるコントリビューターがいます。ドキュメントは https://libpdf.dev にあり、コアライブラリは npm で @libpdf/core として公開されています。
- コントリビューションガイド – リポジトリの
CONTRIBUTING.mdを参照してください。バグ修正、機能リクエスト、ドキュメント改善はいつでも歓迎です。 - ロードマップ – 予定作業に署名検証、TrueType コレクション対応、ブラウザでのレンダリングサポートが含まれます。
実践的なユースケース
- E‑署名プラットフォーム – PAdES サポートと増分署名を迅速に追加。
- ドキュメント生成 – テンプレートから PDF を生成し、フォームに入力し、フォントと画像を埋め込み。
- PDF 分析 – レイアウト情報付きでテキストを抽出し、検索やインデックス化に利用。
- コンプライアンスワークフロー – 文書を結合し、暗号化を適用し、フォームをフラット化。
最終的な考察
LibPDF.js は TypeScript ファーストで PDF 操作の力を現代の JavaScript 開発者に提供します。法務テックスタック、カスタム請求システム、単純な PDF ビューアを構築しているかどうかに関係なく、他のライブラリの摩擦なく必要なツールを提供します。
今すぐ試してみてください – npm でパッケージをインストールし、クイックスタートスニペットを実行して、堅牢な PDF 処理をいかに高速に開始できるかを確認してください。