FastAPI kullanarak pdfkit PDF dosyasını indirin
Oct 23 2020
Html'yi PDF dosyasına dönüştüren bir api oluşturacağım. Pdfkit ve fastapi kullanarak yaptım. Ancak dosyayı yerel ana makineme kaydeder. Bu API'yi çevrimiçi olarak sunduktan sonra, kullanıcılar bu PDF dosyasını bilgisayarlarına nasıl indirebilir?
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')
Yanıtlar
1 Hakan Oct 23 2020 at 15:30
FileResponse'u döndürmek sorunumu çözdü. @Paul H ve @clmno'ya teşekkürler Aşağıdaki kodlar, FastApi ile indirmek için pdf dosyasını döndürmenin çalışma örneğidir.
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) ** Bu, tempfiles kullanmanın başka bir yoludur - bir değişkene pdf eklemek için yol yerine False yazın -
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")
Gene Simmons, KISS Çizgi Romanlarının Potansiyel Olarak "İnsanlığı Yeniden Yaratabileceğini" Söyledi
Nicole Kidman, Michael Keaton ve Val Kilmer'in Batman Olarak Paylaştığı Bu 1 Çekici Özelliğe Bayıldı
Kevin Jonas'ın Kızı Alena, Doğum Günü Fotoğrafında Büyümüş Görünüyor: '9 Yaşında Gerçek Hissetmiyor'