Загрузите pdfkit PDF с помощью FastAPI
Oct 23 2020
Я собираюсь создать api, который конвертирует HTML в файл PDF. Сделал с помощью pdfkit и fastapi. Но он сохраняет файл на моем локальном хосте. После того, как я предоставлю этот 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) ** Это еще один способ использования временных файлов - чтобы добавить pdf в переменную, просто напишите False вместо пути -
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")