Unduh pdfkit PDF menggunakan FastAPI

Oct 23 2020

Saya akan membuat api yang mengubah file html ke PDF. Saya membuatnya menggunakan pdfkit dan fastapi. Tapi itu menyimpan file ke localhost saya. Setelah saya menyajikan api ini secara online, bagaimana pengguna dapat mengunduh file PDF ini ke komputer mereka.

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

Jawaban

1 Hakan Oct 23 2020 at 15:30

Mengembalikan FileResponse memecahkan masalah saya. Terima kasih kepada @Paul H dan @clmno Kode di bawah ini adalah contoh yang berfungsi mengembalikan file pdf untuk diunduh dengan 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) ** Ini adalah cara lain dengan menggunakan tempfiles - untuk menambahkan pdf ke variabel cukup tulis False alih-alih 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")