+115
@@ -0,0 +1,115 @@
|
||||
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)
|
||||
Binary file not shown.
@@ -0,0 +1,45 @@
|
||||
|
||||
# Введение
|
||||
|
||||
Это введение в мою курсовую работу. Текст должен быть отформатирован с использованием стиля "Обычный".
|
||||
|
||||
# 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 |
|
||||
|
||||
# Заключение
|
||||
|
||||
Это заключение.
|
||||
Binary file not shown.
Reference in New Issue
Block a user