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