ดาวน์โหลด 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")