Télécharger pdfkit PDF en utilisant FastAPI
Oct 23 2020
Je vais créer une api qui convertit le html en fichier PDF. Je l'ai fait en utilisant pdfkit et fastapi. Mais il enregistre le fichier sur mon hôte local. Après avoir servi cette API en ligne, comment les utilisateurs peuvent télécharger ce fichier PDF sur leur ordinateur.
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')
Réponses
1 Hakan Oct 23 2020 at 15:30
Le retour de FileResponse est résolu mon problème. Merci à @Paul H et @clmno Les codes ci-dessous sont un exemple fonctionnel de retour de fichier pdf à télécharger avec 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) ** Ceci est une autre façon d'utiliser les fichiers temporaires - pour ajouter un pdf à une variable, écrivez simplement False au lieu de 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")