Imposia ドキュメント
React の HTML をブラウザーのページにして、プレビュー、印刷、PDF 保存までできます。
コンテンツを編集して印刷する機能を作ると、多くの場合「同じはず」の文書が 3 つできあがります。エディターがコンテンツを描画し、プレビューがそれを複製し、印刷経路が別の場所でもう一度組み立て直すためです。やがてプレビューは 12 ページ、PDF は 13 ページになりますが、どちらが正しいかは誰にも答えられません。どれを正とするか、何も決めていないからです。
Imposia はこの問いをなくします。手元の HTML と CSS をブラウザー内で 1 つのページ分割済み文書にし、プレビュー、ネイティブ印刷、PDF に保存のすべての面が、その同じ完成済み文書を参照します。
最初のページを作る
React パッケージをインストールし、10 分ほどで HTML を A4 ページとして表示します。
画像とフォントを読み込む
外部リソースの唯一の経路である assetResolver を実装します。
出版モデル
プレビュー、印刷されたページ、PDF が常に一致する理由を説明します。
API リファレンス
React ハンドル、Core コントローラー、Viewer ナビゲーション、ライフサイクルの規則。
HTML がページになるまで
- アプリが HTML、CSS、ページ設定を Imposia に渡します。
- Core が一時的な iframe で次の版をページ分割します。
- ページ分割が完了すると、Imposia が表示中の文書を一度に置き換えます。
ページ分割に失敗した場合や、より新しい更新が先に始まった場合も、読者には直前に完成した文書が表示され続けます。作りかけのレイアウトが画面に現れることはありません。
1 つの確定したソースから作れるもの
| 出力 | 取得方法 | 受け取るもの |
|---|---|---|
| プレビュー | React Viewer | canonical iframe から表示される完成済みページ |
| 印刷または PDF | print() | ブラウザー標準の印刷ダイアログ。読者はここでプリンターまたはPDF に保存を選びます |
| EPUB | exportEpub() | 任意の機能。ページと同時に確定した意味構造を保つソースから作るリフロー型 EPUB 3.3 Blob |
サイズと速度
| 利用経路 | gzip サイズ | gzip 予算 |
|---|---|---|
| Core · PageDocument | 63.2 KiB | 63.5 KiB |
| Core · Publication | 67.5 KiB | 68 KiB |
| Viewer · PageDocument | 11.8 KiB | 13 KiB |
| Client · PageDocument | 71.8 KiB | 72 KiB |
| React · PageViewer | 73.6 KiB | 74 KiB |
サイズは 2026 年 9 月 27 日に 0.6.0 で測定し、React と React DOM は含みません。Core 全体のブラウザーファイルは gzip 68.4 KiB です。ページ分割の正確性修正による増加分を反映し、予算を 1〜1.5 KiB 引き上げました。サイズ最適化による削減ではありません。測定方法と予算変更の根拠。
| 項目 | 結果 |
|---|---|
| 99 ページの記事をページ分割 | 127 ms |
| その記事の単語を 1 つ変えて再確定 | 127 ms |
| 確定直後の最初の描画フレーム | 2.0 ms |
すべてのエントリーに <style> がある 100 エントリーの Publication をページ分割 | 97 ms |
実行時間は 2026 年 9 月 24 日の Apple M4・Chromium 149 での 7 回の中央値です。pnpm build の後、サイズは pnpm bundle:size、時間は pnpm benchmark で再測定できます。
境界を確認する
Imposia は PDF バイトを返しません
print() はブラウザー自身の印刷フローを開きます。PDF レンダラーも、Node や CLI のレンダラーも、サーバー出版 API もありません。サーバー上で PDF バイトが必要なアプリケーションに Imposia は適していません。その場合はヘッドレスブラウザーかサーバーサイドレンダラーを使ってください。
Imposia はブラウザー内で動作し、ESM として提供されます。この構成がアプリケーションに合うなら、最初のページを作るへ進んでください。