Closed4

SlackがどのようにOfficeファイルのプレビューを実現しているか

ピン留めされたアイテム
daido1976daido1976

結論

Slack の Web ブラウザ版を対象に調べたところ、サーバ側で LibreOffice を用いて Office ファイルを PDF に変換しつつクライアントで PDF.js で描画してるようでした。

daido1976daido1976

調べたいこと

Slack に Office ファイル(Word, Excel, PowerPoint)をアップロードしたときに以下のようにファイルをダウンロードすることなく Slack アプリケーション上でプレビューできるが、これをどうやって実現しているかが知りたい。

前提

  • 調査内容は記事執筆時点(2024/11/18)のものです
  • Slack の Web ブラウザ版を前提に調査しています
daido1976daido1976

調べていく(サーバ側の変換処理)

excel-preview-test.xlsx という Excel ファイルをアップロードしてブラウザの developer tools を覗くと excel-preview-test_converted.pdf という PDF ファイルに変換されているのがわかる

変換後の excel-preview-test_converted.pdf をダウンロードしてファイルの詳細を見ると、

PDF Producer: LibreOffice 24.8.2.1 (X86_64) / LibreOffice Community
Content creator: Calc

となっており、LibreOffice によって PDF が作成されていることがわかる。[1](Calc というのは LibreOffice の表計算アプリケーション)

Word や PowerPoint の場合もそれぞれ Writer、Impress という LibreOffice の対応するアプリケーションで PDF 作成されていた。


脚注
  1. これらのメタデータは編集可能なので絶対に信用できるものではないが、わざわざ編集して実在するアプリケーションを記載するメリットないはずなので信じていいと思う ↩︎

daido1976daido1976

調べていく(クライアント側の処理)

PDF を描画している部分の要素を調べると pdf_viewer.xxx.min.js というファイルに依存しつつ canvas で PDF を表示しているようだった。

また、pdf_viewer.xxx.min.js ファイルの内容は以下のようなもので、「pdfjs」でページ内検索すると PDF.js に依存してそう。
https://a.slack-edge.com/bv1-13-br/pdf_viewer.60fcc349c8ba166b0dad.min.js

このスクラップは2024/12/27にクローズされました