中文專業 PDF 報告生成
🚨 用戶兩次糾正的血淚教訓(2026-08-20,最高優先級,禁止再犯)
- 緊湊排版:嚴禁「一點點內容就一頁」。禁止每個章節加 PageBreak 撐頁數——只在封面後加一個 PageBreak,正文讓它自然流動。之前6頁的內容壓到4頁才對。
- 大字號(手機可讀,客戶在手機看):正文≥16pt、表格≥15pt、H2≥17pt、H1≥21pt、標題≥30pt。14pt正文/12pt表格太小,客戶手機看不清,用戶會當場批評。
- 這兩條在 memory 排版標準裡也寫著,但執行時仍會偷懶用 14pt/12pt + 每章分頁——生成腳本前必須自查字號常量和 PageBreak 數量。
⭐ 全軍排版標準(2026-08-18 用戶欽定,PDF/Word 通用)
這套排版邏輯是標準,以後所有 PDF 和 Word 文檔都參照執行:
- A4豎排(210×297mm)——不用橫排/其他尺寸
- 大字號,手機可讀:正文≥14pt、表格≥12.5pt、H1≥20pt、標題≥32pt
- 表格智能換行不溢出:儲存格用 Paragraph + wordWrap="CJK"
- 頁面內容均衡:不用強制分頁,KeepTogether 智能分塊,生成後檢查每頁字符數(除封面/收尾頁外,各頁應均衡)
- 排版緊湊:邊距 18-20mm、表格 padding 3-4、行距緊湊,直接列印可用
Word 文檔同邏輯:A4豎排、正文≥小四/四號(12-14pt)、表格列寬自適應不溢出、頁面均衡。
觸發條件
- 用戶/客戶要求「把結論做成PDF」、「發PDF上來」、「可研給我」、「結論做出來發我」
- 需要交付專業排版的中文分析報告(封面 + 表格 + 頁腳 + 核心結論框)
- 參考實例:國巡機器人盡調報告(5頁,02-項目成果/國巡機器人項目可行性盡調與分析報告.pdf)
環境與安裝
- 用 hermes venv 直譯器:
python - 首次安裝:
$V -m pip install reportlab(本機已裝 5.0.0) - 字體:Windows 系統自帶微軟雅黑,無需下載字體檔案
C:/Windows/Fonts/msyh.ttc(常規,subfontIndex=0)C:/Windows/Fonts/msyhbd.ttc(粗體)C:/Windows/Fonts/msyhl.ttc(細體)
標準工作流
- ⚠️ 交付鐵律(2026-09-02 用戶明示,最高優先級):PDF 生成後必須
MEDIA:發到飛書聊天框,絕不能只存知識庫 / 只給路徑 / 只發要點。用戶原話:「PDF文檔你要發到飛書聊天框這裡來,要不然我怎麼看到呢?就是要形成鐵律一樣的東西。」- 用戶在手機端看,點飛書訊息裡的文件才看得到;存進
02-項目成果/只是備份,不是交付。 - 交付格式:
<你的輸出目錄>/<檔名>.pdf(絕對路徑)。 - 發完 PDF 附核心結論要點(30秒版)。先發飛書,再存知識庫復盤。
- 用戶在手機端看,點飛書訊息裡的文件才看得到;存進
- 取內容:session_search 查歷史分析——用戶常對附件回「結論做成PDF」,先找回之前出過的研判/盡調內容,不要重寫
- 寫腳本:複製
templates/reportlab_chinese_template.py,只替換內容區(封面文字、章節、表格資料) - 生成:python 執行 → 輸出到 Obsidian
Hermes工作成果/02-項目成果/(命名:<主題>項目可行性盡調與分析報告.pdf) - 驗證:pymupdf 開啟讀 get_text,確認頁數 / 中文渲染 / 末頁結論存在
- 交付:回覆
MEDIA:D:\...pdf路徑 + 核心結論要點(30秒版),不囉嗦
⭐ 配色鐵律(2026-09-02 用戶欽定,喜用神金/土——最高優先級)
用戶八字喜金喜土,忌水(藍/黑)忌火(紅/紫)。所有 PDF 一律用金土系配色,禁止再用藍色。顏色變數見下方 palette。
- 章節大標題 H1:金屬金底 + 白字(
backColor=#C9A227,textColor=white,borderPadding=(6,8,6,8))——金底白字,不是藍色文字。 - 表格表頭:金屬金底 + 白字(
header_bg=#C9A227,FONTNAME=MSYHBD)——金底白字。 - 正文:純黑
#1f1f1f。 - 副題 / 分隔線:深土金
#B8860B(去紅色)。 - 程式碼區塊:土金
#8a6d1f(去藍色)。 - 斑馬紋:淺米金
#FBF3DE(暖調,不是灰白)。 - 格線:淺土金
#D9C9A3。
金色系 palette(reportlab 用)
C_DARK=colors.HexColor("#1f1f1f") # 正文近黑
C_RED=colors.HexColor("#B8860B") # 強調/副題-深土金
C_BLUE=colors.HexColor("#C9A227") # 表頭/標題底-金屬金
C_LGRAY=colors.HexColor("#FBF3DE") # 斑馬紋-淺米金
C_MGRAY=colors.HexColor("#D9C9A3") # 格線-淺土金
C_WHITE=colors.white
行內強調
S_CODE=st(..., textColor=colors.HexColor("#8a6d1f"));行內<span color='#B8860B'>(不用#c0392b紅色)。
排版要點(模板已封裝)
- 封面頁:大標題 + 金色副題 + 日期/來源 + 核心結論框(深土金底白字表)
- 正文:H1 章節(金屬金底白字 MSYHBD 21pt)+ H2 小節(17pt)+ 正文 15pt(2026-08-18 用戶指示:手機端可讀,字號必須大)
- 表格:
make_table()表頭金屬金底白字 + 斑馬紋(ROWBACKGROUNDS)+ grid + repeatRows=1,表格字號 13pt - 頁腳:onPage 回呼畫報告名 + 頁碼
- 強調:Paragraph 支援
<b>/<span color='#B8860B'>行內標記 - 長報告分章節:PageBreak 分隔封面與正文
⚠️ 字號鐵律(2026-08-18 用戶強調):PDF 是給手機看的,正文≥15pt、表格≥13pt、H1≥21pt、標題≥34pt。原模板 10.5pt/9.3pt 太小,手機看不清——所有新報告必須用大字號。字號大導致頁數變多是正常的(如5頁→8頁)。
⭐ 智能排版鐵律(2026-08-18 用戶強調,列印友好)頁面內容必須均衡——不能某頁只有200字符、某頁擠800字符。方法:
- 少用 PageBreak:只在封面後強制分頁,正文讓它自然流動
- **用 KeepTogether 包裹