|
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 |
|
}) |