|
|
|
|
import re
|
|
|
|
|
import subprocess
|
|
|
|
|
import os
|
|
|
|
|
import uuid
|
|
|
|
|
|
|
|
|
|
# 获取MathType对应的Latex公式
|
|
|
|
|
def get_latex_list(docx_file):
|
|
|
|
|
# 获取当前目录的父级目录
|
|
|
|
|
current_dir = os.path.dirname(os.path.abspath(__file__))
|
|
|
|
|
current_dir = os.path.dirname(current_dir)
|
|
|
|
|
mtef = os.path.join(current_dir, 'mtef-go-3', 'mtef-go.exe')
|
|
|
|
|
res = []
|
|
|
|
|
output = os.path.join(os.environ['TEMP'], uuid.uuid4().hex + '.txt')
|
|
|
|
|
command = mtef + r" -w " + docx_file + " -o " + output
|
|
|
|
|
os.system(command)
|
|
|
|
|
with open(output, 'r', encoding='utf-8') as file:
|
|
|
|
|
for i, line in enumerate(file):
|
|
|
|
|
res.append(line.strip())
|
|
|
|
|
return res
|
|
|
|
|
|
|
|
|
|
# 结合Pandoc和mtef-go的结果,合并成最终的输出文本
|
|
|
|
|
def get_docx_content_by_pandoc(docx_file):
|
|
|
|
|
# 一、获取Latex公式列表
|
|
|
|
|
formula_list = get_latex_list(docx_file)
|
|
|
|
|
|
|
|
|
|
# StringBuilder结果
|
|
|
|
|
sb = []
|
|
|
|
|
# output_file 设置为临时目录下的uuid.md
|
|
|
|
|
temp_markdown = os.path.join(os.environ['TEMP'], uuid.uuid4().hex + '.md')
|
|
|
|
|
# 调用pandoc将docx文件转换成markdown
|
|
|
|
|
subprocess.run(['pandoc', docx_file, '-f', 'docx', '-t', 'markdown', '-o', temp_markdown])
|
|
|
|
|
# 读取然后修改内容,输出到新的文件
|
|
|
|
|
idx = 0
|
|
|
|
|
with open(temp_markdown, 'r', encoding='utf-8') as docx_file:
|
|
|
|
|
for line in docx_file:
|
|
|
|
|
if line.strip():
|
|
|
|
|
# 改进后的正则表达式,匹配更多格式的MathType公式
|
|
|
|
|
if re.search(r'!\[]\(media/image\d+\.\w+\)', line) or \
|
|
|
|
|
re.search(r'\.!\[]\(media/image\d+\.\w+\)\.', line):
|
|
|
|
|
sb.append(formula_list[idx])
|
|
|
|
|
idx = idx + 1
|
|
|
|
|
else:
|
|
|
|
|
sb.append(line.strip())
|
|
|
|
|
|
|
|
|
|
# 删除临时文件 output_file
|
|
|
|
|
os.remove(temp_markdown)
|
|
|
|
|
return sb
|
|
|
|
|
|
|
|
|
|
|