# DocxWizard — Модуль пошагового создания Word-документов ## Стек технологий | Компонент | Инструмент | Зачем | |--------------------|-------------------------------|---------------------------------------------| | Язык | C++17 | Основной язык проекта | | GUI + логика | Qt5 (Widgets) | Уже используется в проекте | | Генерация DOCX | Qt5 (QZipWriter) или QuaZip | DOCX — это ZIP+XML; Qt умеет это нативно | | Изображения | Qt5 QFile | Чтение и вставка бинарных данных изображений | **Внешних зависимостей нет** (кроме Qt5, которая уже есть). --- ## Архитектура ``` main.cpp └── MainWindow ← Главное окно; редактор строк-шаблонов └── DocumentWizard ← Пошаговый диалог (QDialog) ├── parseTemplates() ← Читает строки шаблона → список шагов ├── showStep() ← Показывает нужный UI для шага ├── applyCurrentStep() ← Передаёт данные в DocxBuilder └── DocxBuilder ← Генерирует .docx файл ├── addHeading() ├── addParagraph() ├── addTable() ├── addImage() └── save() ← Записывает ZIP/XML в файл ``` --- ## Формат строк шаблона Строки шаблона «скармливаются» программе в начале работы. Каждая строка задаёт один шаг мастера: ``` тип|Подсказка для пользователя|Вариант1;Вариант2;Вариант3 ``` ### Типы элементов | Тип | Результат в документе | Примечание | |----------|-------------------------------|--------------------------------------| | heading1 | Заголовок 1 (18pt, жирный) | Times New Roman | | heading2 | Заголовок 2 (15pt, жирный) | Times New Roman | | heading3 | Заголовок 3 (13pt, жирный) | Times New Roman | | text | Обычный абзац (12pt) | Times New Roman | | table | Таблица с заголовками | UI для ввода строк | | image | Встроенное изображение | PNG/JPG, размер в см | ### Пример шаблона ``` heading1|Введите название документа|Технический отчёт;Пояснительная записка heading2|Название раздела «Введение»|1. Введение;1. Общие сведения text|Напишите вводный абзац|Настоящий документ описывает…;В данной работе… table|Заполните таблицу характеристик| image|Вставьте схему архитектуры| heading2|Заключение|4. Заключение;4. Выводы text|Напишите заключение|В результате работы…;Таким образом… ``` --- ## Сборка ```bash cd docx_module qmake DocxWizard.pro make # Linux/macOS # или nmake # Windows (MSVC) ``` ### Альтернатива QZipWriter → QuaZip Если Qt5 собрана без приватных заголовков (`-private`): ```bash # Ubuntu/Debian sudo apt install libquazip5-dev # или vcpkg vcpkg install quazip ``` Затем в `DocxBuilder.cpp` замените: ```cpp // Было: #include // Стало: #include #include ``` И адаптируйте метод `DocxBuilder::save()` — используйте `QuaZip` + `QuaZipFile` вместо `QZipWriter`. API очень похожи. --- ## Интеграция в существующий Qt5 проект 1. Скопируйте `DocxBuilder.h/.cpp` и `DocumentWizard.h/.cpp` в свой проект. 2. В `.pro` добавьте: ``` QT += core-private # для QZipWriter SOURCES += DocxBuilder.cpp DocumentWizard.cpp HEADERS += DocxBuilder.h DocumentWizard.h ``` 3. Используйте из кода: ```cpp QStringList tmpl = loadTemplateFromFile("template.txt"); DocumentWizard dlg(tmpl, this); if (dlg.exec() == QDialog::Accepted) qDebug() << "Сохранено:" << dlg.outputFilePath(); ``` --- ## Расширение функциональности | Задача | Куда добавить | |--------------------------------|------------------------------------------| | Нумерованные списки | `DocxBuilder::addList()` | | Верхний/нижний колонтитул | `DocxBuilder::buildDocumentXml()` — `` | | Оглавление | XML-элемент `` с `TOC` | | Сохранение шаблона в файл | `QSettings` или простой `.txt` | | Предпросмотр документа | LibreOffice → конвертировать в PDF → показать |