38 lines
1.1 KiB
Python
38 lines
1.1 KiB
Python
from fastapi import FastAPI, Request
|
||
from fastapi.staticfiles import StaticFiles
|
||
from pydantic import BaseModel
|
||
from reportlab.pdfgen import canvas
|
||
from reportlab.pdfbase import pdfmetrics
|
||
from reportlab.pdfbase.ttfonts import TTFont
|
||
import uuid, os
|
||
|
||
app = FastAPI()
|
||
|
||
os.makedirs("static", exist_ok=True)
|
||
app.mount("/static", StaticFiles(directory="static"), name="static")
|
||
|
||
# ✅ 註冊中文字體(請確保字體檔案存在)
|
||
font_path = "NotoSansTC-Medium.ttf" # 或使用微軟系統內建:msjh.ttc(微軟正黑體)
|
||
if os.path.exists(font_path):
|
||
pdfmetrics.registerFont(TTFont("MyFont", font_path))
|
||
font_name = "MyFont"
|
||
else:
|
||
font_name = "Helvetica" # fallback
|
||
|
||
class TextRequest(BaseModel):
|
||
content: str
|
||
|
||
@app.post("/generate-pdf")
|
||
def generate_pdf(data: TextRequest, request: Request):
|
||
filename = f"{uuid.uuid4()}.pdf"
|
||
filepath = os.path.join("static", filename)
|
||
|
||
c = canvas.Canvas(filepath)
|
||
c.setFont(font_name, 12)
|
||
c.drawString(100, 750, data.content[:1000])
|
||
c.save()
|
||
|
||
return {
|
||
"url": str(request.base_url) + f"static/{filename}"
|
||
}
|