Трек «Метод Дегтярева»: концепция, презентация и рабочие листы
This commit is contained in:
commit
2c79f59064
28 files changed
+2999
No files matched your search
@@ -0,0 +1,200 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from docx import Document
|
||||
from docx.shared import Pt, Cm, RGBColor
|
||||
from docx.enum.text import WD_ALIGN_PARAGRAPH
|
||||
from docx.enum.table import WD_TABLE_ALIGNMENT
|
||||
from docx.oxml.ns import qn
|
||||
from docx.oxml import OxmlElement
|
||||
|
||||
OUT = 'Метод_Дегтярева_гайд_интервью.docx'
|
||||
|
||||
GREEN = RGBColor(0x2E, 0x7D, 0x5B)
|
||||
ROSE = RGBColor(0xB0, 0x3A, 0x55)
|
||||
DARK = RGBColor(0x1A, 0x1A, 0x1A)
|
||||
GRAY = RGBColor(0x5F, 0x66, 0x6B)
|
||||
LIGHT = RGBColor(0x8A, 0x90, 0x95)
|
||||
|
||||
|
||||
def set_run(run, name='Arial', size=9, bold=False, italic=False, color=DARK):
|
||||
run.font.name = name
|
||||
run.font.size = Pt(size)
|
||||
run.font.bold = bold
|
||||
run.font.italic = italic
|
||||
run.font.color.rgb = color
|
||||
rPr = run._element.get_or_add_rPr()
|
||||
rFonts = rPr.find(qn('w:rFonts'))
|
||||
if rFonts is None:
|
||||
rFonts = OxmlElement('w:rFonts')
|
||||
rPr.append(rFonts)
|
||||
for attr in ('w:ascii', 'w:hAnsi', 'w:eastAsia', 'w:cs'):
|
||||
rFonts.set(qn(attr), name)
|
||||
|
||||
|
||||
def cell_margins(table, top=80, bottom=80, left=180, right=180):
|
||||
tblPr = table._tbl.tblPr
|
||||
mar = OxmlElement('w:tblCellMar')
|
||||
for tag, val in (('top', top), ('left', left), ('bottom', bottom), ('right', right)):
|
||||
el = OxmlElement('w:' + tag)
|
||||
el.set(qn('w:w'), str(val))
|
||||
el.set(qn('w:type'), 'dxa')
|
||||
mar.append(el)
|
||||
tblPr.append(mar)
|
||||
|
||||
|
||||
def add_line_table(cell, lines=4, width_cm=17.5, height_cm=0.6):
|
||||
tbl = cell.add_table(rows=lines, cols=1)
|
||||
tbl.autofit = False
|
||||
tblPr = tbl._tbl.tblPr
|
||||
borders = OxmlElement('w:tblBorders')
|
||||
for edge in ('top', 'left', 'bottom', 'right', 'insideH', 'insideV'):
|
||||
el = OxmlElement('w:' + edge)
|
||||
el.set(qn('w:val'), 'none')
|
||||
borders.append(el)
|
||||
tblPr.append(borders)
|
||||
for row in tbl.rows:
|
||||
row.height = Cm(height_cm)
|
||||
c = row.cells[0]
|
||||
c.width = Cm(width_cm)
|
||||
tcPr = c._tc.get_or_add_tcPr()
|
||||
tcBorders = OxmlElement('w:tcBorders')
|
||||
bottom = OxmlElement('w:bottom')
|
||||
bottom.set(qn('w:val'), 'dotted')
|
||||
bottom.set(qn('w:sz'), '4')
|
||||
bottom.set(qn('w:space'), '0')
|
||||
bottom.set(qn('w:color'), 'AFC4B9')
|
||||
tcBorders.append(bottom)
|
||||
tcPr.append(tcBorders)
|
||||
p = c.paragraphs[0]
|
||||
p.paragraph_format.space_before = Pt(0)
|
||||
p.paragraph_format.space_after = Pt(0)
|
||||
p.paragraph_format.line_spacing = 1.0
|
||||
|
||||
|
||||
def card_border(cell):
|
||||
tcPr = cell._tc.get_or_add_tcPr()
|
||||
tcBorders = OxmlElement('w:tcBorders')
|
||||
for edge in ('top', 'left', 'bottom', 'right'):
|
||||
el = OxmlElement('w:' + edge)
|
||||
el.set(qn('w:val'), 'single')
|
||||
el.set(qn('w:sz'), '14' if edge == 'top' else '4')
|
||||
el.set(qn('w:space'), '0')
|
||||
el.set(qn('w:color'), '2E7D5B' if edge == 'top' else 'C9D6CF')
|
||||
tcBorders.append(el)
|
||||
tcPr.append(tcBorders)
|
||||
|
||||
|
||||
def add_card(cell):
|
||||
cell.text = ''
|
||||
card_border(cell)
|
||||
|
||||
p = cell.paragraphs[0]
|
||||
p.paragraph_format.space_before = Pt(0)
|
||||
p.paragraph_format.space_after = Pt(0)
|
||||
r = p.add_run('ГАЙД ИНТЕРВЬЮ')
|
||||
set_run(r, name='Georgia', size=15, bold=True, color=GREEN)
|
||||
|
||||
p = cell.add_paragraph()
|
||||
p.paragraph_format.space_before = Pt(1)
|
||||
p.paragraph_format.space_after = Pt(1)
|
||||
r = p.add_run('Шаг 1. «Забой» • Метод Дегтярева')
|
||||
set_run(r, size=8, bold=True, color=GRAY)
|
||||
|
||||
p = cell.add_paragraph()
|
||||
p.paragraph_format.space_before = Pt(0)
|
||||
p.paragraph_format.space_after = Pt(4)
|
||||
r = p.add_run('Команда: ______________________________')
|
||||
set_run(r, size=8, color=GRAY)
|
||||
|
||||
questions = [
|
||||
'Расскажите, как вы в последний раз решали эту задачу?',
|
||||
'Что в этом процессе было самым неприятным? Почему?',
|
||||
'Что вы сделали, чтобы это обойти?',
|
||||
'Сколько времени, денег или сил это у вас забрало?',
|
||||
'Кто ещё с этим сталкивается?',
|
||||
'Что происходит, если проблему не решить?',
|
||||
'Если бы это исчезло, что бы изменилось?',
|
||||
]
|
||||
for i, q in enumerate(questions, 1):
|
||||
p = cell.add_paragraph()
|
||||
p.paragraph_format.space_before = Pt(0)
|
||||
p.paragraph_format.space_after = Pt(1)
|
||||
p.paragraph_format.left_indent = Cm(0.5)
|
||||
p.paragraph_format.first_line_indent = Cm(-0.5)
|
||||
p.paragraph_format.line_spacing = 1.0
|
||||
r = p.add_run(f'{i}. ')
|
||||
set_run(r, size=9, bold=True, color=GREEN)
|
||||
r = p.add_run(q)
|
||||
set_run(r, size=9, color=DARK)
|
||||
|
||||
p = cell.add_paragraph()
|
||||
p.paragraph_format.space_before = Pt(4)
|
||||
p.paragraph_format.space_after = Pt(1)
|
||||
r = p.add_run('ПРАВИЛА')
|
||||
set_run(r, size=8, bold=True, color=ROSE)
|
||||
|
||||
rules = [
|
||||
'Спрашивайте о прошлом, а не о будущем.',
|
||||
'Не презентуйте свою идею — слушайте.',
|
||||
'Записывайте точные цитаты.',
|
||||
'Ищите повторяемость, а не яркие истории.',
|
||||
'Минимум 5 интервью, лучше 10.',
|
||||
]
|
||||
for rule in rules:
|
||||
p = cell.add_paragraph()
|
||||
p.paragraph_format.space_before = Pt(0)
|
||||
p.paragraph_format.space_after = Pt(0)
|
||||
p.paragraph_format.left_indent = Cm(0.45)
|
||||
p.paragraph_format.first_line_indent = Cm(-0.45)
|
||||
p.paragraph_format.line_spacing = 1.0
|
||||
r = p.add_run('• ')
|
||||
set_run(r, size=8, color=ROSE)
|
||||
r = p.add_run(rule)
|
||||
set_run(r, size=8, color=GRAY)
|
||||
|
||||
p = cell.add_paragraph()
|
||||
p.paragraph_format.space_before = Pt(4)
|
||||
p.paragraph_format.space_after = Pt(1)
|
||||
r = p.add_run('ЗАМЕТКИ')
|
||||
set_run(r, size=8, bold=True, color=GREEN)
|
||||
add_line_table(cell, lines=4, width_cm=17.5, height_cm=0.6)
|
||||
|
||||
p = cell.add_paragraph()
|
||||
p.paragraph_format.space_before = Pt(2)
|
||||
p.paragraph_format.space_after = Pt(0)
|
||||
r = p.add_run('5 интервью — минимум. Спрашивайте о прошлом, не о будущем.')
|
||||
set_run(r, size=7, italic=True, color=LIGHT)
|
||||
|
||||
|
||||
def build():
|
||||
doc = Document()
|
||||
section = doc.sections[0]
|
||||
section.page_width = Cm(21.0)
|
||||
section.page_height = Cm(29.7)
|
||||
section.top_margin = Cm(1.0)
|
||||
section.bottom_margin = Cm(1.0)
|
||||
section.left_margin = Cm(1.0)
|
||||
section.right_margin = Cm(1.0)
|
||||
|
||||
normal = doc.styles['Normal']
|
||||
normal.font.name = 'Arial'
|
||||
normal.font.size = Pt(9)
|
||||
normal.font.color.rgb = DARK
|
||||
|
||||
for page in range(4):
|
||||
table = doc.add_table(rows=2, cols=1)
|
||||
table.alignment = WD_TABLE_ALIGNMENT.CENTER
|
||||
table.autofit = False
|
||||
cell_margins(table)
|
||||
for row in table.rows:
|
||||
row.height = Cm(13.2)
|
||||
row.cells[0].width = Cm(19.0)
|
||||
add_card(row.cells[0])
|
||||
if page < 3:
|
||||
doc.add_page_break()
|
||||
|
||||
doc.save(OUT)
|
||||
print('saved', OUT)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
build()
|
||||
Reference in new issue
Block a user