本主要是为了实现Streamlit中实现显示PDF文件,其实这种方式就是利用浏览器本身的一种预览方式实现的。
因为初学streamlit,在网上看了一堆如何实现streamlit中显示PDF,都是从本地文件(也就是绝对路径)实现PDF显示的,通过st.file_uploader上传文件的方式进行预览的,尝试了很多次都不成功,最后看到一篇博客介绍如何获取streamlit上传文档的路径,最终成功显示。
代码实现:
import streamlit as st
import base64
from pathlib import Path
import tempfile
def writer():
file = st.file_uploader("选择待上传的PDF文件", type=['pdf'])
if st.button("点击"):
if file is not None:
with tempfile.NamedTemporaryFile(delete=False) as tmp_file:
fp = Path(tmp_file.name)
fp.write_bytes(file.getvalue())
with open(tmp_file.name, "rb") as f:
base64_pdf = base64.b64encode(f.read()).decode('utf-8')
pdf_display = f'<embed src="data:application/pdf;base64,{base64_pdf}" ' \
f'width="800" height="1000" type="application/pdf">'
st.markdown(pdf_display, unsafe_allow_html=True)
最终显示效果: