オフィススイートなしで、文書をブラウザでプレビュー

BDF は、ブラウザ向けの文書プレビュースイートです。多様な形式に対応するコンバーター(Go/WASM)、gzip 圧縮後約 23 KB のブラウザ用レンダラー、中間形式で構成されます。

PDF が PostScript をベースにした印刷向けのポータブル文書形式であるのに対し、BDF は Canvas 2D の描画命令を基盤とした、ブラウザ表示向けの軽量な中間形式です。サーバーでの事前生成と、WASM を使ったブラウザ内でのリアルタイム変換に対応します。

ビューアを開く ドキュメントを読む GitHub

BDF から描いた PDF

サーバーで変換するのと同じように、あらかじめ変換してあります。ページめくり、テキストの選択、検索、拡大ができます。

demo.pdf → demo.bdf

PDF で 240 KB、フォントを含む BDF で 142 KB。ページは表示の直前に Range リクエストで取得します。

文書変換が速く、メモリと電力も少なく

同じ Office ファイルを LibreOffice + Poppler と BDF の Go 変換器で処理して比較しました。

変換+サムネイル作成の経過時間(中央値)

  • 小さい DOCX

    LibreOffice + Poppler 0.69 s
    BDF(Go) 0.05 s
  • 小さい PPTX

    LibreOffice + Poppler 1.01 s
    BDF(Go) 0.03 s
  • 小さい XLSX

    LibreOffice + Poppler 0.65 s
    BDF(Go) 0.04 s
  • 合成 XLSX · 4 シート × 3,000 行

    LibreOffice + Poppler 1.55 s
    BDF(Go) 0.23 s
  • 合成 PPTX · 100 スライド

    LibreOffice + Poppler 56.38 s
    BDF(Go) 0.12 s
横棒はファイルごとに比較し、長い方を 100% に正規化。数値は測定値です。

最大 RSS(中央値)

  • 小さい DOCX

    LibreOffice + Poppler 161.8 MiB
    BDF(Go) 43.4 MiB
  • 小さい PPTX

    LibreOffice + Poppler 147.3 MiB
    BDF(Go) 38.2 MiB
  • 小さい XLSX

    LibreOffice + Poppler 123.7 MiB
    BDF(Go) 36.0 MiB
  • 合成 XLSX · 4 シート × 3,000 行

    LibreOffice + Poppler 288.3 MiB
    BDF(Go) 48.7 MiB
  • 合成 PPTX · 100 スライド

    LibreOffice + Poppler 1,918.9 MiB
    BDF(Go) 40.8 MiB
横棒はファイルごとに比較し、長い方を 100% に正規化。数値は測定値です。

1 文書あたりの推定 SoC エネルギー

  • 小さい DOCX・小さい PPTX・小さい XLSX の文書あたり平均

    LibreOffice + Poppler 4.27 J
    BDF(Go) 0.24 J
横棒はファイルごとに比較し、長い方を 100% に正規化。数値は測定値です。
3 ラウンドの範囲(J/文書): LibreOffice + Poppler 3.30–7.16、BDF 0.24–0.25。

Apple Silicon の Mac を AC 電源で使用。時間と最大 RSS は、変換と先頭ページの 256 px サムネイル作成までを新規プロセスで計測した 5 回の中央値。大きな XLSX・PPTX は合成データです。エネルギーは 小さい DOCX・小さい PPTX・小さい XLSX の変換を 3 ラウンド繰り返し、powermetrics の CPU・GPU・ANE の SoC 推定値からアイドル分を差し引いて文書あたりで算出。コンセントでの実測値ではありません。

シートはスクロールできるシートのまま、本はページをめくって。どれも同じレンダラが描きます。

対応する形式は 29 種類。Visio、Illustrator、Photoshop、TIFF、HTML、Markdown、フォントファイルなども: 形式の一覧

手元のファイルで試す

ファイルはブラウザの中で変換します。アップロードはされません。

システムに組み込む

構成ごとのサンプルプロジェクトが 3 つ。どれも小さな Go のサーバーとページです。

なぜ BDF か

もっと詳しく