File size: 1,696 Bytes
9f2140e 645eb49 06dd81d abf3a3c fb2826f 4a1eeb0 789a1ec 62e091c 60ee365 ec874f4 60ee365 3b3819e d844446 abf3a3c b9e5f15 abf3a3c fb2826f 645eb49 f4c2ee1 844f0f4 f136ca9 9f2140e 4a1eeb0 6ff817f 76443b7 d39bc85 b23b1d8 e334184 3a9de65 06dd81d b211267 f4c2ee1 cf36b8d b23b1d8 645eb49 dde7f29 2dce97e f4c2ee1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
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
}) |