Files
md_to_gost/ad/Conv.py
T
Igor20264 516abe7b83
Python application / build (push) Has been cancelled
BigUpdate
2026-09-03 10:44:08 +03:00

115 lines
4.5 KiB
Python

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)