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.

54 lines
2.2 KiB

2 weeks ago
import os
import subprocess
import uuid
2 weeks ago
2 weeks ago
def get_docx_content_by_pandoc(docx_file):
2 weeks ago
# 最后拼接的内容
content = ""
# output_file 设置为临时目录下的uuid.md
2 weeks ago
file_name = uuid.uuid4().hex
2 weeks ago
# 将docx_file去掉扩展名
2 weeks ago
prefix = docx_file.split(".")[0].split("/")[-1]
2 weeks ago
temp_markdown = os.path.join('./static/markdown/', prefix + '.md')
2 weeks ago
# 调用pandoc将docx文件转换成markdown
2 weeks ago
os.mkdir("./static/Images/" + file_name)
2 weeks ago
subprocess.run(['pandoc', docx_file, '-f', 'docx', '-t', 'markdown', '-o', temp_markdown,
2 weeks ago
'--extract-media=./static/Images/' + file_name])
2 weeks ago
# 读取然后修改内容,输出到新的文件
img_idx = 0 # 图片索引
with open(temp_markdown, 'r', encoding='utf-8') as f:
for line in f:
line = line.strip()
if not line:
continue
# 跳过图片高度描述行
if line.startswith('height=') and line.endswith('in"}'):
continue
# 使用find()方法安全地检查图片模式
2 weeks ago
is_img = line.find("![](") >= 0 and (
2 weeks ago
line.find(".png") > 0 or
line.find(".jpg") > 0 or
line.find(".jpeg") > 0
)
2 weeks ago
if is_img:
2 weeks ago
# ![](media/image3.png){width="3.1251607611548557in"
2 weeks ago
# height="3.694634733158355in"}
2 weeks ago
# ![](../static/Images/01b20e04085e406ea5375791da58a60f/media/image3.png){width="3.1251607611548557in"
2 weeks ago
pos = line.find(")")
2 weeks ago
q = line[:pos + 1]
2 weeks ago
q=q.replace("./static",".")
#q = q[4:-1]
#q='<img src="'+q+'" alt="我是图片">'
2 weeks ago
img_idx += 1
2 weeks ago
content += q + "\n"
2 weeks ago
else:
2 weeks ago
content += line.strip().replace("**", "") + "\n"
2 weeks ago
content=content.replace("\phantom","")
2 weeks ago
# 将content回写到markdown文件
2 weeks ago
with open(temp_markdown, 'w', encoding='utf-8') as f:
f.write(content)
# 删除临时文件 output_file
# os.remove(temp_markdown)
2 weeks ago
return content.replace("\n\n", "\n").replace("\\", "")