LaTex / app.py
YoBatM's picture
Update app.py
76443b7 verified
from fastapi import FastAPI,Request
from fastapi.templating import Jinja2Templates
from fastapi.responses import HTMLResponse,Response
import os,io,base64 as b64
from pdf2image import convert_from_path, convert_from_bytes
from pdf2image.exceptions import (
PDFInfoNotInstalledError,
PDFPageCountError,
PDFSyntaxError
)
class BaseImage:
img:str=None
def format(codigo:str,size:float):
return f"""\\documentclass[12pt]{{article}}
\\usepackage[fontsize={size}pt]{{fontsize}}
\\begin{{document}}
{codigo}
\\end{{document}}"""
from subprocess import run
app=FastAPI();
def get_bytes_value(image):
img_byte_arr = io.BytesIO()
image.save(img_byte_arr, format='JPEG')
img_byte_arr.seek(0)
return img_byte_arr.getvalue()
imags=BaseImage()
templates = Jinja2Templates(directory="templates")
@app.get("/image",response_class=Response)
def img(request: Request):
return Response(content=b64.b64decode(imags.img),media_type="image/jpeg") if imags.img else "No image"
@app.get("/",response_class=HTMLResponse)
def test(request: Request,q:str="ls",body:bool=True,x:int=1024,y:int=1024,font:float=50):
with open("./v.tex","w") as k:
k.write(format(q,font) if body else q)
r=run("pdflatex v.tex".split(" "),capture_output=True)
if r.stderr:
return r.stderr
else:
images=convert_from_path("v.pdf",size=(x,y))
images[0].save("v.jpg",format="JPEG")
with open("v.jpg","rb") as t:
v=b64.b64encode(t.read()).decode('UTF-8')
imags.img=v
return templates.TemplateResponse("latex.html",
{
"q":q,
"request":request,
"result":v
})