Files

45 lines
1.4 KiB
Python

#!/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']};
}}"""