ดาวน์โหลด pdfkit PDF โดยใช้ FastAPI

Oct 23 2020

ฉันจะสร้าง api ซึ่งแปลง html เป็นไฟล์ PDF ฉันทำโดยใช้ pdfkit และ fastapi แต่จะบันทึกไฟล์ลงใน localhost ของฉัน หลังจากที่ฉันให้บริการ API นี้ทางออนไลน์แล้วผู้ใช้จะดาวน์โหลดไฟล์ PDF นี้ไปยังคอมพิวเตอร์ได้อย่างไร

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

คำตอบ

1 Hakan Oct 23 2020 at 15:30

การส่งคืน FileResponse ช่วยแก้ปัญหาของฉันได้ ขอบคุณ @Paul H และ @clmno โค้ดด้านล่างนี้เป็นตัวอย่างการทำงานของการส่งคืนไฟล์ pdf เพื่อดาวน์โหลดด้วย 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) ** นี่เป็นอีกวิธีหนึ่งในการใช้ tempfiles - ในการเพิ่ม pdf ให้กับตัวแปรเพียงแค่เขียน False แทน 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")