#!/usr/bin/env python # -*- coding: utf-8 -*- """页码 CSS 生成""" from typing import Any, Dict def _resolve_page_number_config(config: Dict[str, Any]) -> Dict[str, Any]: """从模板 JSON 解析页码配置""" show = config.get("showPageNumber") if show is None: show = config.get("show_page_number", True) return { "show": bool(show), "position": config.get("pageNumberPosition", "footer"), "align": config.get("pageNumberAlign", "center"), "format": config.get("pageNumberFormat", "chinese"), "font_size": config.get("pageNumberFontSize", 10), "color": config.get("pageNumberColor", "#666666"), } def build_page_number_css(config: Dict[str, Any]) -> str: """生成 WeasyPrint @page 页码 margin 规则""" cfg = _resolve_page_number_config(config) if not cfg["show"]: return "" edge = "top" if cfg["position"] == "header" else "bottom" margin_box = f"{edge}-{cfg['align']}" fmt = cfg["format"] if fmt == "fraction": content = 'counter(page) " / " counter(pages)' elif fmt == "english": content = '"Page " counter(page) " of " counter(pages)' else: content = '"第 " counter(page) " 页 / 共 " counter(pages) " 页"' return f""" @{margin_box} {{ content: {content}; font-size: {float(cfg['font_size'])}pt; color: {cfg['color']}; }}"""