更新 pdf 格式

This commit is contained in:
2025-07-14 13:01:08 +08:00
parent bd61a47cea
commit 0623553a84
3 changed files with 15 additions and 5 deletions

BIN
NotoSansTC-Medium.ttf Normal file

Binary file not shown.

Binary file not shown.

20
app.py
View File

@@ -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}"
}