Scarica pdfkit PDF utilizzando FastAPI
Oct 23 2020
Creerò un'API che converte HTML in file PDF. L'ho fatto usando pdfkit e fastapi. Ma salva il file sul mio localhost. Dopo aver pubblicato questa API online, come gli utenti possono scaricare questo file PDF sul proprio computer.
from typing import Optional
from fastapi import FastAPI
import pdfkit
app = FastAPI()
@app.post("/htmltopdf/{url}")
def convert_url(url:str):
pdfkit.from_url(url, 'converted.pdf')
Risposte
1 Hakan Oct 23 2020 at 15:30
La restituzione di FileResponse ha risolto il mio problema. Grazie a @Paul H e @clmno Qui sotto i codici funzionano come esempio di restituzione di file pdf da scaricare con FastApi.
from typing import Optional
from fastapi import FastAPI
from starlette.responses import FileResponse
import pdfkit
app = FastAPI()
config = pdfkit.configuration(wkhtmltopdf=r"C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe")
@app.get("/")
def read_root():
pdfkit.from_url("https://nakhal.expo.com.tr/nakhal/preview","file.pdf", configuration=config)
return FileResponse(
"file.pdf",
media_type="application/pdf",
filename="ticket.pdf")
** 2) ** Questo è un altro modo con l'utilizzo dei file temporanei: per aggiungere pdf a una variabile scrivi semplicemente False invece di path -
from typing import Optional
from fastapi import FastAPI
from starlette.responses import FileResponse
import tempfile
import pdfkit
app = FastAPI()
config = pdfkit.configuration(wkhtmltopdf=r"C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe")
@app.get("/")
def read_root():
pdf = pdfkit.from_url("https://nakhal.expo.com.tr/nakhal/preview",False, configuration=config)
with tempfile.NamedTemporaryFile(mode="w+b", suffix=".pdf", delete=False) as TPDF:
TPDF.write(pdf)
return FileResponse(
TPDF.name,
media_type="application/pdf",
filename="ticket.pdf")