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.

50 lines
1.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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