diff --git a/03.Code/geulbeot_업로드용/handlers/template/doc_template_analyzer.py b/03.Code/geulbeot_업로드용/handlers/template/doc_template_analyzer.py new file mode 100644 index 0000000..dacfe79 --- /dev/null +++ b/03.Code/geulbeot_업로드용/handlers/template/doc_template_analyzer.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +""" +문서 템플릿 분석기 v5.1 (자동 추출 방식) +""" +import json +from pathlib import Path +from .tools import ( + page_setup, font, char_style, para_style, border_fill, + table, header_footer, section, style_def, numbering, + image, content_order +) + +class DocTemplateAnalyzer: + def analyze(self, parsed: dict) -> dict: + raw_xml = parsed.get("raw_xml", {}) + extractors = { + "page": lambda: page_setup.extract(raw_xml, parsed), + "fonts": lambda: font.extract(raw_xml, parsed), + "char_styles": lambda: char_style.extract(raw_xml, parsed), + "para_styles": lambda: para_style.extract(raw_xml, parsed), + "border_fills": lambda: border_fill.extract(raw_xml, parsed), + "tables": lambda: table.extract(raw_xml, parsed), + "header": lambda: header_footer.extract_header(raw_xml, parsed), + "footer": lambda: header_footer.extract_footer(raw_xml, parsed), + "section": lambda: section.extract(raw_xml, parsed), + "styles": lambda: style_def.extract(raw_xml, parsed), + "numbering": lambda: numbering.extract(raw_xml, parsed), + "images": lambda: image.extract(raw_xml, parsed), + "content_order":lambda: content_order.extract(raw_xml, parsed), + } + result = {} + for key, extractor in extractors.items(): + try: + value = extractor() + if value is not None: + result[key] = value + except Exception as e: + result.setdefault("_errors", []).append(f"{key}: {type(e).__name__}: {e}") + return result + + def merge_user_config(self, template_info: dict, config: dict) -> dict: + user_overrides = config.get("user_overrides", {}) + if not user_overrides: + return template_info + template_info["user_overrides"] = user_overrides + return template_info + + def save_style(self, template_info: dict, save_path: Path) -> Path: + save_path = Path(save_path) + save_path.parent.mkdir(parents=True, exist_ok=True) + with open(save_path, 'w', encoding='utf-8') as f: + json.dump(template_info, f, ensure_ascii=False, indent=2) + return save_path