Streamlit は、Python の豊富なサードパーティライブラリを利用して Web アプリケーションを作成できる優れもののフレームワークです。テキスト、JSON、画像、オーディオ、ビデオ、Pandas データフレームはオブジェクトを投入すればそのまま画面に表示されるので、GUI の構築も簡単です。
st.pdf登場
しかし、意外なことに、PDF は表示できませんでした。そのため、サードパーティのコンポーネントを導入したり、PyMuPDF などで画像化してから表示する強引な手がこれまでは必要でした。
しかし、もうそんな手間は不要です。Streamlit 1.49.0(2025年8月29日リリース)から PDF ビューワーの st.pdf が利用できるようになったからです。
さっそく試そう
データは URL 文字列、ローカルパス文字列、io.BytesIO(あるいはその親戚の UploadedFile)、bytes から引き渡せるので、いつものように st.file_uploader からアップロードするだけです。
import streamlit as st
pdf_file = st.file_uploader('PDFファイルをアップロードしてください',
type='pdf'
)
if pdf_file:
st.pdf(pdf_file)
関数オプションは、表示エリアの高さを指定する height しかありません。最大まで引っ張る "stretch" かピクセル値(整数)を指定でき、デフォルトは 500ピクセルです。
あとは動かすだけです。
$ pip install streamlit # streamlit を導入
$ python -m streamlit run # サーバをスタート
デフォルトで localhost と自機のローカルインタフェース(eth0など)のポート 8501 にバインドされるので、http://localhost:8501 とかでアクセスできます。
実行例
e-Gov ポータル から適当に見繕ってきた PDF を表示します。
垂直スクロールバーが出るので、複数ページでも問題なく読めます。デフォルトでは、先頭ページ幅がコンテナサイズに合うように縮小拡大されるようですが、+ーボタンで拡大縮小してくれます。ま、この辺りは、st.dataframeなど他のインタフェースと同じ要領です。
おわりに
Streamlit には Web サーバも含まれているので、ローカルでならすぐにでもサービスを展開できます。インターネットワイドでの展開なら、コミュニティサイトが無料で使えます。たとえば、こんな感じです。
公式サイトの Documentation セクションの Get Started(さぁ、始めよう)はシンプルで、わかりやすいです。英語ですが、AI 翻訳を通せば困りません。日本語でのまとまった情報が入用なら、技術評論社刊の『作ってわかる[入門]Streamlit 〜 Pythonによる実践Webサービス開発』(2024年2月刊)があります。

