🐹

Slack に貼られた PDF の URL をプレビューできるようにしてみた

2024/11/01に公開

Slack は今のところ PDF のリンクはプレビューできないようだ

(2024/11/01現在の情報です)

しかし、我はせめて最初の 1 ページだけでも見たい!!

bot に実装してみる

Python で PDF を扱う方法をいろいろ調査してみたところ pypdfium2 がいい感じだった
https://github.com/pypdfium2-team/pypdfium2

web に公開されている PDF からテキストを抽出してみるなどいろいろ実験してみたけど、そもそもテキスト情報が存在しなかったりするものが多いという印象だったので、レンダリングした結果を画像としてアップロードするという方法にした

実装詳細

ひとまず

  • リンクとして認識されたもの <link> の終端が .pdf なものを
  • コンテンツとして取得 requests.get して PdfDocument オブジェクトにして
  • render でレンダリングしたビットマップイメージを PNG で保存
  • そのファイルをアップロード

という形にしてみた

やってみた

https://www.daisho.co.jp/dw/wp-content/uploads/2024/10/お知らせ.pdf
読めない!!

これは読めない……つらい……でもしかたない……

https://www.bauhutte.jp/wp-content/uploads/2024/10/473c1bbd52002583f087d17750d2d25d.pdf

イメージはつかめる

これならなんとかイメージはつかめる

https://chaos.gremlin.com/rs/251-JGH-155/images/2019-11-Chaos_Engineering_Whitepaper.pdf

ヘタにテキストを抽出するよりいいかも!!

実装はこちら

https://github.com/sharl/slackbotapp/blob/9be41ff6aab2fb1e26472814207475984bd75c06/modules/message/pdf.py

これは自前の SlackBot のモジュールですが、Google Apps Script や AWS Lambda などで実行するようにしてもいい感じになるかも

実用的にするには

  • 複数 URL に対応
  • 有意なテキスト情報があればそれも表示する

とかですねおそらく

Enjoy!!

Discussion