DEV Community

artydev
artydev

Posted on • Edited on

FastHTML : View PDF in browser

For reasonable size pdf files, this script can suffice:

from fasthtml.common import *
import base64


app = FastHTML(hdrs=(picolink,))

@app.post("/post_and_display_pdf")
async def display_pdf(myFile:UploadFile):
    bytes_stream =  await myFile.read()
    base64_encoded_bytes = base64.b64encode(bytes_stream)
    return Iframe(
        src = f'data:Application/pdf;base64,{base64_encoded_bytes.decode('utf-8')}',
        style = "width:100%;height:100%"
    )

def formPDF ():
    form = Form(Group(Input(id="myFile", type="file"), Button("Add")),
               hx_post="/post_and_display_pdf", hx_target="#mypdf", hx_swap="outerhtml")
    return Main(form, style="flex:1")    

@app.route("/")
def get():
    return Div(
        H1("Upload and Display PDF's", style="text-align:center"),
        Div (
            Div(id="mypdf", style="flex:1;position:relative;min-height:89vh;background:rgba(0,0,0,0.1)"),
            formPDF (),
            style="display:flex;gap:0.5rem"
        )

    )

serve()
Enter fullscreen mode Exit fullscreen mode

Top comments (0)