123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- import configure
- import os
- env_dict = os.environ
- henglish_conf = env_dict.get("HENGLISH_CONF")
- if henglish_conf is not None:
- configure.configure(henglish_conf, encoding="utf-8")
- try:
- from core.db import WordDatabase, word
- from docx import Document, shared, enum
- from docx.enum import section, text
- from docx.oxml.ns import qn
- except ImportError:
- print("Run `pip install python-docx` first.")
- else:
- def make_word(title: str, little_title: str, db: WordDatabase, font0=15, font1=8, font2=7, start=0, end=300,
- file_name="English"):
- doc = Document()
- sec = doc.sections[0] # sections对应文档中的“节”
- normal_style = doc.styles['Normal']
- normal_style.font.name = u'微软雅黑' # 必须先设置font.name
- normal_style.element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑')
- normal_style.font.color.rgb = shared.RGBColor(0, 0, 0)
- h1_style = doc.styles['Heading 1']
- h1_style.font.name = u'微软雅黑' # 必须先设置font.name
- h1_style.element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑')
- h1_style.font.size = shared.Pt(30)
- h1_style.font.color.rgb = shared.RGBColor(0, 0, 0)
- h2_style = doc.styles['Heading 2']
- h2_style.font.name = u'微软雅黑' # 必须先设置font.name
- h2_style.element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑')
- h2_style.font.size = shared.Pt(font0)
- h2_style.font.color.rgb = shared.RGBColor(0, 0, 0)
- sec.left_margin = shared.Cm(3.18) # 以下依次设置左、右、上、下页面边距
- sec.right_margin = shared.Cm(3.18)
- sec.top_margin = shared.Cm(1.27)
- sec.bottom_margin = shared.Cm(1.27)
- sec.orientation = section.WD_ORIENTATION.LANDSCAPE # 设置纵向
- sec.page_width = shared.Cm(21) # 设置页面宽度
- sec.page_height = shared.Cm(29.7) # 设置页面高度
- sec.different_first_page_header_footer = True
- title_par = doc.add_heading(level=1)
- title_par.paragraph_format.alignment = text.WD_PARAGRAPH_ALIGNMENT.CENTER
- title_run = title_par.add_run(title)
- title_run.add_break(text.WD_BREAK.PAGE)
- header = sec.header.paragraphs[0] # 获取第一个节的页眉
- header.paragraph_format.alignment = text.WD_PARAGRAPH_ALIGNMENT.CENTER
- l_title = header.add_run(little_title) # 添加页面内容
- l_title.font.size = shared.Pt(6)
- footer = sec.footer.paragraphs[0] # 获取第一个节的页眉
- footer.paragraph_format.alignment = text.WD_PARAGRAPH_ALIGNMENT.CENTER
- power_bt = footer.add_run(f"Power HEnglish! https://github.com/SuperH-0630/HEnglish") # 添加页面内容
- power_bt.font.size = shared.Pt(6)
- def add_word(w: word.Word):
- doc.add_heading(w.name, level=2) # 添加标题
- for i in w.comment:
- c: word.Word.Comment = w.comment[i]
- paragraph = doc.add_paragraph()
- part = paragraph.add_run(c.part + " ")
- part.italic = True
- part.bold = True
- part.font.size = shared.Pt(font1)
- english = paragraph.add_run(c.english)
- english.bold = True
- english.font.size = shared.Pt(font1)
- chinese = paragraph.add_run(c.chinese)
- chinese.bold = True
- chinese.font.size = shared.Pt(font1)
- for eg_index, e in enumerate(c.eg):
- e = e.split("##")
- english_sentence = paragraph.add_run(f"Eg {eg_index + 1}: " + e[0])
- english_sentence.font.size = shared.Pt(font2)
- chinese_sentence = paragraph.add_run(" " + e[1] + "")
- chinese_sentence.font.size = shared.Pt(font2)
- ph_format = paragraph.paragraph_format
- ph_format.line_spacing_rule = text.WD_LINE_SPACING.SINGLE # 设置行间距
- last_ten = -1
- index = start
- while True:
- w = db.find_word_by_index(index)
- if w is None:
- break
- add_word(w)
- index += 1
- if index // 10 > last_ten:
- last_ten = index // 10
- print(index)
- if index == end:
- break
- doc.save(f'{file_name}.docx')
- return index
- word_db = WordDatabase("high_school", configure.conf["DB_TEMPLATE"])
- page = 0
- step = 500
- book = 1
- while True:
- print(f"Book: {book}")
- ret = make_word(f"\n\n\nHigh School English\nWord - {book}",
- f"High School English Word - {book}",
- word_db,
- start=page,
- end=page + step,
- file_name=f"English{book}")
- if ret != page + step:
- break
- page += step
- book += 1
|