Загрузка данных
from docx import Document
from docx.shared import Pt, Inches, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn
def set_tnr_14(element):
"""Принудительно устанавливает Times New Roman 14 пт для абзаца или ячейки таблицы"""
for run in element.runs:
run.font.name = 'Times New Roman'
run.font.size = Pt(14)
# Для корректного отображения кириллицы в некоторых версиях Word
run._element.rPr.rFonts.set(qn('w:eastAsia'), 'Times New Roman')
def format_document(doc):
"""Применяет базовое форматирование ко всему документу"""
style = doc.styles['Normal']
style.font.name = 'Times New Roman'
style.font.size = Pt(14)
style._element.rPr.rFonts.set(qn('w:eastAsia'), 'Times New Roman')
style.paragraph_format.line_spacing = 1.5
def add_formatted_heading(doc, text, level=1):
"""Добавляет заголовок с форматированием TNR 14, жирный"""
p = doc.add_heading(text, level=level)
p.alignment = WD_ALIGN_PARAGRAPH.LEFT
for run in p.runs:
run.font.name = 'Times New Roman'
run.font.size = Pt(14)
run.font.bold = True
run._element.rPr.rFonts.set(qn('w:eastAsia'), 'Times New Roman')
return p
def add_formatted_table(doc, data, headers):
"""Создает таблицу и применяет к ней форматирование TNR 14"""
table = doc.add_table(rows=1, cols=len(headers))
table.style = 'Table Grid'
# Заголовки
hdr_cells = table.rows[0].cells
for i, header in enumerate(headers):
hdr_cells[i].text = header
set_tnr_14(hdr_cells[i])
# Делаем заголовок жирным
for run in hdr_cells[i].paragraphs[0].runs:
run.font.bold = True
# Данные
for row_data in data:
row_cells = table.add_row().cells
for i, cell_data in enumerate(row_data):
row_cells[i].text = str(cell_data)
set_tnr_14(row_cells[i])
doc.add_paragraph() # Отступ после таблицы
return table
# 1. Инициализация документа
doc = Document()
format_document(doc)
# === 1. ТИТУЛЬНЫЙ ЛИСТ ===
doc.add_paragraph("\n" * 3)
p = doc.add_paragraph('Министерство образования и науки\nДепартамент образования вашего региона\nНазвание вашего колледжа')
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
for run in p.runs: set_tnr_14(p)
doc.add_paragraph("\n" * 4)
p = doc.add_paragraph('ПРОЕКТНАЯ РАБОТА\nпо дисциплине «Управление проектами»\n\nна тему:\n«Создание локального сервиса печати и оперативной полиграфии «Копирка-Campus»')
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
for run in p.runs:
set_tnr_14(p)
run.font.bold = True
doc.add_paragraph("\n" * 4)
p = doc.add_paragraph('Выполнил: студент группы ХХ-ХХ\nИванов И.И.\nПроверил: Петров П.П.')
p.alignment = WD_ALIGN_PARAGRAPH.RIGHT
for run in p.runs: set_tnr_14(p)
doc.add_paragraph("\n" * 2)
p = doc.add_paragraph('Город, 2026 г.')
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
for run in p.runs: set_tnr_14(p)
doc.add_page_break()
# === 2. СОДЕРЖАНИЕ ===
add_formatted_heading(doc, 'СОДЕРЖАНИЕ', level=1)
toc_data = [
"Введение ................................................................................................................... 3",
"Глава 1. Теоретико-концептуальное обоснование проекта ................................ 4",
" 1.1. Дерево целей и задач .................................................................................... 4",
" 1.2. Анализ заинтересованных сторон (Stakeholders) ....................................... 5",
" 1.3. SWOT-анализ проекта ................................................................................... 6",
"Глава 2. Организационно-управленческий план проекта ................................... 7",
" 2.1. Иерархическая структура работ (ИСР/WBS) .............................................. 7",
" 2.2. Календарно-сетевое планирование (Данные для диаграммы Ганта) ....... 8",
" 2.3. Матрица ответственности (RACI) ............................................................... 9",
" 2.4. Бюджет проекта (Смета) ............................................................................ 10",
" 2.5. Реестр рисков .............................................................................................. 11",
" 2.6. Коммуникационный план ........................................................................... 12",
"Заключение ............................................................................................................ 13",
"Список использованных источников ................................................................... 14",
"Приложения ........................................................................................................... 15"
]
for item in toc_data:
p = doc.add_paragraph(item)
set_tnr_14(p)
doc.add_page_break()
# === 3. ВВЕДЕНИЕ ===
add_formatted_heading(doc, 'ВВЕДЕНИЕ', level=1)
intro_text = [
"1. Актуальность: В современном учебном процессе студентам и преподавателям постоянно требуется оперативная печать конспектов, курсовых работ и раздаточных материалов. Существующие решения в городе находятся за пределами кампуса, что отнимает время, а библиотечный принтер не справляется с потоком и часто ломается. Создание точки внутри колледжа решит проблему доступности и скорости.",
"2. Цель проекта: Запустить функционирующий сервис оперативной полиграфии «Копирка-Campus» на базе библиотеки колледжа к 01.02.2027 года с окупаемостью в течение 6 месяцев.",
"3. Задачи проекта: 1) Изучить спрос и ценовую политику конкурентов; 2) Согласовать размещение оборудования с администрацией библиотеки; 3) Закупить МФУ и расходные материалы; 4) Нанять и обучить 2-х студентов-операторов; 5) Запустить рекламную кампанию в чатах групп.",
"4. Объект и предмет исследования: Объект — процесс организации сервиса оперативной полиграфии в учебном заведении. Предмет — методы планирования ресурсов, сроков и бюджета данного проекта без использования специализированного ПО.",
"5. Сроки выполнения: Начало проекта — 01.11.2026. Окончание проекта (запуск) — 01.02.2027. Общий срок: 3 месяца."
]
for text in intro_text:
p = doc.add_paragraph(text)
set_tnr_14(p)
doc.add_page_break()
# === ГЛАВА 1 ===
add_formatted_heading(doc, 'ГЛАВА 1. ТЕОРЕТИКО-КОНЦЕПТУАЛЬНОЕ ОБОСНОВАНИЕ ПРОЕКТА', level=1)
add_formatted_heading(doc, '1.1. Дерево целей и задач', level=2)
p = doc.add_paragraph('1. Запустить сервис «Копирка-Campus»\n 1.1. Подготовить документацию\n 1.1.1. Составить бизнес-план и смету\n 1.1.2. Согласовать размещение с администрацией библиотеки\n 1.2. Обеспечить техническую базу\n 1.2.1. Выбрать и закупить МФУ и бумагу\n 1.2.2. Организовать рабочее место оператора\n 1.3. Обеспечить кадровый ресурс\n 1.3.1. Провести отбор студентов-операторов\n 1.3.2. Провести инструктаж по технике безопасности')
set_tnr_14(p)
add_formatted_heading(doc, '1.2. Анализ заинтересованных сторон (Stakeholders)', level=2)
stakeholders_headers = ['Заинтересованная сторона', 'Интересы / Выгоды', 'Возможные риски', 'Стратегия взаимодействия']
stakeholders_data = [
['Студенты', 'Дешевая и быстрая печать рядом с аудиторией', 'Очереди в перерывах', 'Введение системы предзаказа через Telegram'],
['Администрация колледжа', 'Доп. сервис для студентов, имидж инновационности', 'Нарушение пожарной безопасности', 'Регулярные отчеты, строгое соблюдение ТБ'],
['Сотрудники библиотеки', 'Отсутствие лишней нагрузки на их технику', 'Шум, пыль от картриджей', 'Выделение изолированного угла, регулярная уборка']
]
add_formatted_table(doc, stakeholders_data, stakeholders_headers)
add_formatted_heading(doc, '1.3. SWOT-анализ проекта', level=2)
swot_headers = ['Внутренняя среда', 'Внешняя среда']
swot_data = [
['S (Сильные стороны):\n- Низкая аренда (льготная от колледжа)\n- Понимание потребностей целевой аудитории', 'O (Возможности):\n- Партнерство с местной типографией для сложных заказов\n- Расширение ассортимента (ламинация, переплет)'],