You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
3.5 KiB
119 lines
3.5 KiB
11 months ago
|
from docx import Document
|
||
|
from docx.oxml import OxmlElement
|
||
|
from docx.oxml.ns import qn
|
||
|
from operator import eq
|
||
|
|
||
|
flag = True
|
||
|
|
||
|
def get_paragraph_shading(p):
|
||
|
"""
|
||
|
Get paragraph`s shading
|
||
|
Usage:
|
||
|
get_paragraph_shading(paragraph)
|
||
|
"""
|
||
|
p_pr = p._p.get_or_add_pPr() # 获取段落的pPr
|
||
|
# print(p_pr)
|
||
|
p_shd = p_pr.first_child_found_in("w:shd") # 找到 'w:shd' 标签
|
||
|
# 如果不存在,就创建
|
||
|
if p_shd is None:
|
||
|
p_shd = OxmlElement('w:shd')
|
||
|
p_pr.append(p_shd)
|
||
|
# 获取各属性的值
|
||
|
val = p_shd.get(qn('w:val'))
|
||
|
# color = p_shd.get(qn('w:color'))
|
||
|
fill = p_shd.get(qn('w:fill'))
|
||
|
print([val, fill])
|
||
|
return [val, fill]
|
||
|
|
||
|
def get_paragraph_boders(p):
|
||
|
"""
|
||
|
Get paragraph`s boders
|
||
|
Usage:
|
||
|
get_paragraph_boders(paragraph)
|
||
|
"""
|
||
|
p_pr = p._p.get_or_add_pPr() # 获取段落的pPr
|
||
|
p_borders = p_pr.first_child_found_in("w:pBdr") # 找到 'p_borders' 标签
|
||
|
# 如果不存在,就创建
|
||
|
if p_borders is None:
|
||
|
p_borders = OxmlElement('w:pBdr')
|
||
|
p_pr.append(p_borders)
|
||
|
# 获取各属性的值
|
||
|
borders = []
|
||
|
for edge in ('left', 'top', 'right', 'bottom'):
|
||
|
element = p_borders.find(qn('w:{}'.format(edge)))
|
||
|
if element is None:
|
||
|
element = OxmlElement('w:{}'.format(edge))
|
||
|
p_borders.append(element)
|
||
|
border = []
|
||
|
for key in ["sz", "val", "color"]:
|
||
|
temp = str(element.get(qn('w:{}'.format(key))))
|
||
|
if temp == 'none' or temp == '0' or temp == 'auto' or temp == 'NONE':
|
||
|
temp = 'None'
|
||
|
border.append(temp)
|
||
|
borders.append(border)
|
||
|
return borders
|
||
|
|
||
|
def get_text_borders(p):
|
||
|
t_pr = p.runs[0].element.rPr
|
||
|
|
||
|
t_bor = t_pr.first_child_found_in("w:bdr") # 找到 'w:bdr' 标签
|
||
|
# 如果不存在,就创建
|
||
|
if t_bor is None:
|
||
|
t_bor = OxmlElement('w:bdr')
|
||
|
t_pr.append(t_bor)
|
||
|
# # 获取各属性的值
|
||
|
val = t_bor.get(qn('w:val'))
|
||
|
color = t_bor.get(qn('w:color'))
|
||
|
sz = t_bor.get(qn('w:sz'))
|
||
|
return [val, sz, color]
|
||
|
|
||
|
def Comp(name1, name2):
|
||
|
"""
|
||
|
Compare the diferences of two files
|
||
|
Usage:
|
||
|
Comp(file_name1, file_name2)
|
||
|
"""
|
||
|
global flag
|
||
|
ff = 'K:/工作/traveler/test/'
|
||
|
# s = Document(name1)
|
||
|
# t = Document(name2)
|
||
|
s = Document(ff + name1)
|
||
|
t = Document(ff + name2)
|
||
|
|
||
|
# 获取段落
|
||
|
x = s.paragraphs
|
||
|
|
||
|
y = t.paragraphs
|
||
|
|
||
|
l = len(x)
|
||
|
for i in range(l-1):
|
||
|
s_shd = get_paragraph_shading(x[i])
|
||
|
t_shd = get_paragraph_shading(y[i])
|
||
|
s_border = get_paragraph_boders(x[i])
|
||
|
t_border = get_paragraph_boders(y[i])
|
||
|
if not eq(s_shd, t_shd):
|
||
|
print('效果对比出错,问题:',s_shd,'应该修改为:',t_shd)
|
||
|
print(1)
|
||
|
flag = False
|
||
|
break
|
||
|
if not eq(s_border, t_border):
|
||
|
print(1)
|
||
|
print('效果对比出错,问题:',s_border,'应该修改为:',t_border)
|
||
|
flag = False
|
||
|
break
|
||
|
|
||
|
# 判断标题的文字边框
|
||
|
if not eq(get_text_borders(x[0]), get_text_borders(y[0])):
|
||
|
print('文字边框设置出错,问题:',get_text_borders(x[0]),'应该修改为:',get_text_borders(y[0]))
|
||
|
flag = False
|
||
|
|
||
|
try:
|
||
|
Comp('中国共产党党史.docx', '美化文档.docx')
|
||
|
|
||
|
if flag:
|
||
|
print('Accepted!')
|
||
|
else:
|
||
|
print('文件内容错误,请调整后重试!')
|
||
|
except Exception as e:
|
||
|
print(e)
|
||
|
print('请按步骤创建、操作文本后重试!')
|