# המרת `.dotx` → `.docx` עבור python-docx ## למה python-docx **לא יודע לפתוח** קובצי Word Template (`.dotx`). ניסיון לפתיחה זורק: ``` ValueError: file 'X.dotx' is not a Word file, content type is 'application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml' ``` כי `main document part` של `.dotx` מסומן כ-template, לא כ-document. ## הפתרון — המרה חד-פעמית קובץ `.dotx` הוא ZIP שכולל את אותם parts כמו `.docx` + `word/glossary/` (building blocks). להמרה: 1. פתח את ה-ZIP. 2. **הסר** את כל ה-parts תחת `word/glossary/`. 3. **תקן** `[Content_Types].xml`: - החלף `template.main+xml` ב-`document.main+xml` - הסר `` entries שמצביעים ל-`/word/glossary/...` 4. **תקן** `word/_rels/document.xml.rels`: - הסר את ה-`` עם `Type=".../relationships/glossaryDocument"` 5. שמור מחדש כ-ZIP עם סיומת `.docx`. ## הסקריפט [`scripts/convert_decision_template.py`](../../../scripts/convert_decision_template.py) (בשורש הפרויקט) עושה את זה. הרץ אותו: - פעם אחת אחרי clone של הפרויקט (אם `skills/docx/decision_template.docx` לא קיים). - בכל פעם שדפנה מעדכנת את `data/training/טיוטת החלטה.dotx`. ```bash python scripts/convert_decision_template.py # → skills/docx/decision_template.docx ``` הסקריפט כולל verification שבודק שהקובץ שנוצר נטען נקי ב-python-docx ושהסגנונות הקריטיים (Normal, Heading 2, Quote, List Paragraph, Title) נמצאים בו. ## למה לא `docxtpl`? `docxtpl` מיועד ל-**placeholder substitution** סגנון Jinja2 (`{{ variable }}`). הטמפלט שלנו לא מכיל placeholders — אנחנו מרכיבים תוכן דינמי. `python-docx` על טמפלט `.docx` נקי מספיק לגמרי. ## הימנע מ- - **אל תנסה** להוריד את ה-glossary רק מ-`[Content_Types].xml` בלי להסיר את ה-`` שמפנה אליו → תקבל dangling reference. - **אל תנסה** להשתמש ב-`.dotx` ישירות דרך `zipfile` + לבנות Document ידנית — חוסך 10 שורות אבל מאבד את כל ה-robustness של python-docx.