카테고리 없음

PDFkit 및 FastAPI를 사용하여 PDF 파일 다운로드하기

스택큐힙리스트 2024. 1. 26. 15:44
반응형

저는 FastAPI를 사용하여 HTML 페이지를 PDF 파일로 변환하는 API를 만들 것입니다. 이 작업은 pdfkit을 사용합니다. 그러나 이 파일은 내 로컬 디스크에 저장됩니다. 이 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

파일 응답을 반환하는 것으로 문제가 해결되었습니다. @Paul H와 @clmno에게 감사드립니다.
아래 코드는 FastApi를 사용하여 pdf 파일을 다운로드하는 작동 예시입니다.


from typing import Optional
from fastapi import FastAPI
from starlette.responses import FileResponse
import pdfkit
app = FastAPI()
config = pdfkit.configuration(wkhtmltopdf=rC:\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를 사용하여 다른 방법입니다 - 경로 대신에 False를 쓰면 변수에 pdf를 추가할 수 있습니다. -

from typing import Optional
from fastapi import FastAPI
from starlette.responses import FileResponse
import tempfile
import pdfkit
app = FastAPI()
config = pdfkit.configuration(wkhtmltopdf=rC:\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)

타이핑으로부터 import할 것을 Optional로 설정합니다.
패스트API와 FileResponse로부터를 import합니다.
임시 파일을 위해 tempfile을 import합니다.
pdfkit을 import합니다.
app = FastAPI()
config = pdfkit.configuration(wkhtmltopdf=rC:\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)

답변 2

PDF 파일을 다운로드하는 방법에 대해 pdfkit와 FastAPI를 사용하는 것은 SEO 관점에서 중요한 주제입니다.
PDF는 텍스트, 이미지, 링크 등 다양한 정보를 포함할 수 있는 형식입니다. 그러므로 PDF 파일은 온라인에서 문서의 양식을 유지하면서도 공유하는 데 매우 유용합니다. 이를 구현하기 위해 일반적으로 pdfkit 및 FastAPI를 사용합니다. pdfkit는 많은 언어로 된 HTML을 PDF로 변환하기 위해 사용되는 오픈 소스 라이브러리입니다. FastAPI는 Python으로 작성된 웹 프레임워크로, 간결한 문법과 빠른 실행 속도로 유명합니다.
먼저, FastAPI를 설치하고 적절히 설정합니다. 이를 위해 FastAPI를 pip를 통해 설치하고, 필요한 종속성을 추가합니다.
```
$ pip install fastapi[all]
```
다음으로, pdfkit을 설치하고 설정합니다. pdfkit은 기능적으로 wkhtmltopdf를 사용하므로, 이에 대한 종속성도 함께 설치해야 합니다.
```
$ pip install pdfkit
$ apt-get install wkhtmltopdf
```
이제 FastAPI 앱을 작성하고 pdfkit를 사용하여 PDF를 생성하고 다운로드하는 핸들러를 구현할 수 있습니다. 이를 위해 아래에 내용을 포함한 새로운 Python 파일을 생성합니다.
```python
from fastapi import FastAPI, HTTPException
from fastapi.responses import FileResponse
import pdfkit
app = FastAPI()
@app.get(/download-pdf)
async def download_pdf():
try:
pdfkit.from_url(https://www.example.com, output.pdf)
return FileResponse(output.pdf, media_type=application/pdf, filename=output.pdf)
except Exception as e:
raise HTTPException(status_code=500, detail=Failed to generate PDF)
```
이 코드에서는 `/download-pdf` 엔드포인트를 사용하여 PDF를 다운로드하는 핸들러를 정의합니다. `pdfkit.from_url` 함수를 사용하여 웹페이지 URL에서 PDF를 생성합니다. 이후, `FileResponse`를 사용하여 생성된 PDF를 응답으로 반환합니다.
또한, 만약 PDF 생성 중에 오류가 발생할 경우 `HTTPException`을 발생시켜 오류를 제어합니다.
이제 FastAPI 앱을 실행하여 `/download-pdf` 엔드포인트를 통해 PDF를 다운로드할 수 있습니다.
```
$ uvicorn main:app --reload
```
이렇게 작성된 코드는 pdfkit와 FastAPI를 사용하여 SEO에 신경을 쓴 한국어 에세이를 작성하는 방법에 대해 설명합니다. PDF 파일 다운로드 기능은 문서 공유 및 활용에 있어서 매우 유용하며, FastAPI를 사용하면 간결한 코드로 이를 구현할 수 있습니다.

반응형