import pypandoc from docx import Document from docx.shared import Pt, Cm from docx.enum.text import WD_ALIGN_PARAGRAPH from docx.enum.style import WD_STYLE_TYPE def apply_custom_formatting(doc): """Применяет дополнительное форматирование, которое не может быть обработано Pandoc.""" # Нумерация страниц (простой пример) # Более сложные колонтитулы лучше настроить в reference.docx for section in doc.sections: section.footer.paragraphs[0].text = "\t" # Чтобы номер был по центру или справа, настройте табуляцию # Добавление рамок к листингам кода, если они не были применены стилем for paragraph in doc.paragraphs: if 'листинг' in paragraph.text.lower() or 'listing' in paragraph.text.lower(): # Здесь можно применить стиль, который вы создали, например 'CodeListing' # paragraph.style = 'CodeListing' pass # Логика для добавления границ, если нужно def markdown_to_docx(md_file, docx_file, reference_doc): """ Основная функция для конвертации Markdown в DOCX. """ # Шаг 1: Используем Pandoc для основной конвертации pypandoc.convert_file( md_file, 'docx', outputfile=docx_file, extra_args=[f'--reference-doc={reference_doc}', '--toc'] # --toc для создания оглавления ) # Шаг 2: Открываем созданный документ с помощью python-docx для дальнейшей обработки doc = Document(docx_file) # Шаг 3: Вставляем титульный лист в начало документа # Создаем новый пустой документ для титульного листа title_doc = Document() # Добавляем содержимое основного документа после титульного листа for element in doc.element.body: title_doc.element.body.append(element) doc = title_doc # Шаг 4: Применяем дополнительное форматирование apply_custom_formatting(doc) # Шаг 5: Сохраняем финальный документ doc.save(docx_file) print(f"Документ '{docx_file}' успешно создан.") if __name__ == '__main__': # --- НАСТРОЙКИ --- markdown_input = 'my_report.md' # Имя вашего входного Markdown файла docx_output = 'my_report.docx' # Имя выходного DOCX файла reference_docx = 'samost1.docx' # Имя вашего эталонного документа # Создаем пример Markdown файла для демонстрации markdown_content = """ # Введение Это введение в мою курсовую работу. Текст должен быть отформатирован с использованием стиля "Обычный". # 1. Структура учебной работы Здесь описывается структура работы. ## 1.1 Титульный лист Титульный лист - это первая страница работы. ## 1.2 Содержание Содержание включает в себя перечень всех разделов. # 2. Оформление текста документа Здесь описываются правила оформления текста. - Первое правило - Второе правило - Третье правило 1. Нумерованный список 1 2. Нумерованный список 2 Листинг 1.1 – Пример кода ` ` `python def hello_world(): print("Hello, World!") ` ` ` Таблица 1.1 - Пример таблицы | Заголовок 1 | Заголовок 2 | |-------------|-------------| | Ячейка 1 | Ячейка 2 | | Ячейка 3 | Ячейка 4 | # Заключение Это заключение. """ with open(markdown_input, 'w', encoding='utf-8') as f: f.write(markdown_content) # --- ЗАПУСК КОНВЕРТЕРА --- markdown_to_docx(markdown_input, docx_output, reference_docx)