diff --git a/NotoSansTC-Medium.ttf b/NotoSansTC-Medium.ttf new file mode 100644 index 0000000..3d813db Binary files /dev/null and b/NotoSansTC-Medium.ttf differ diff --git a/__pycache__/app.cpython-312.pyc b/__pycache__/app.cpython-312.pyc deleted file mode 100644 index e375ff3..0000000 Binary files a/__pycache__/app.cpython-312.pyc and /dev/null differ diff --git a/app.py b/app.py index 496b3a7..897bf46 100644 --- a/app.py +++ b/app.py @@ -1,7 +1,9 @@ -from fastapi import FastAPI +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() @@ -9,19 +11,27 @@ 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): +def generate_pdf(data: TextRequest, request: Request): filename = f"{uuid.uuid4()}.pdf" filepath = os.path.join("static", filename) c = canvas.Canvas(filepath) - c.setFont("Helvetica", 12) - c.drawString(100, 750, data.content[:1000]) # 控制最多幾個字,否則會 overflow + c.setFont(font_name, 12) + c.drawString(100, 750, data.content[:1000]) c.save() return { - "url": f"/static/{filename}" + "url": str(request.base_url) + f"static/{filename}" }