typora不能内嵌图片,导入notion时会出现图片丢失以及将markdown发送给其他人需要附带图片文件夹。记录解决方法
一、将图片嵌入markdown
1. 使用方法
python tb.py -f 文件路径
例如:
python tb.py -f HTML/test.md
代码会在相同的地方创建同名的带有“_html"的 markdown 文件,然后使用typora导出html就好了
注意:这里定义了默认的起始路径,如果需要,请自行修改,另外,在执行python前,请把cmd的工作路径切换到 tb,py 所在的路径,使用 cd xx 命令.
2. 代码
import sys
import getopt
import re
import base64
# 将typora的图片嵌入markdown里面的代码
# 参考链接:
# https://subce.gitee.io/htmls/essays/typora_base64_html.html
if __name__ == "__main__":
# 表示参数选项有:-h, -f, -p, --help, --functionname, --partdate,它们相互对应;
# 该方法的返回值有两个元素: 第一个是(opt, value)元组的列表,
# 第二个是一般参数列表,包含那些没有 '-' 或 '--' 的参数
typora_path = "E:/project/java/heima_JavaWebStart/source_code/day04-Maven&MyBatis/day04-1-Maven/ppt/" # typora 工作路径
try:
opts, args = getopt.getopt(sys.argv[1:], "hf:", ["help", "functionname="])
except getopt.GetoptError:
print('Error: ***.py -f <functionname> -p <partdate>')
print(' or: ***.py --functionname=<functionname> --partdate=<partdate>')
sys.exit(2)
for opt in opts:
if opt[0] == "-f":
file_type_name = opt[1].split("/")[-1]
file_name = file_type_name[:-3] # md文件文件名 不带后缀
file_folder = typora_path + opt[1][:-len(file_type_name)] + "/" # md文件所在文件夹
#file_folder = "E:/Users/SubChange/OneDrive - zju.edu.cn/CollaborationWork/typora/" + "HTML/"
#file_name = "test"
file_path = file_folder + file_name + ".md"
print(file_path)
new_file_path = file_folder + file_name + "_html.md"
base64_data_list = []
base64_type_list = []
fig_num = 0
# 同时打开两个,一个读取 一个写入
with open(file_path, 'r', encoding='utf-8') as f1:
with open(new_file_path,'w', encoding='utf-8') as f2:
while True:
line = f1.readline() # 逐行读取
# 正则表达式
pattern1 = re.compile(r'.*!\[.*\](\(.*\.[a-z]*\))')
pattern2 = re.compile(r".*<img src=\"(.*\.[a-z]*)\" ([a-z]*=.*;\" />)")
matchObj1 = re.match(pattern1, line, flags=0)
matchObj2 = re.match(pattern2, line, flags=0)
if matchObj1 is None and matchObj2 is None:
f2.write(line)
elif matchObj2 is None:
# matchObj1
line_pre = line[:matchObj1.regs[1][0]].split("![")[0]
line_bd = line[matchObj1.regs[0][1]:]
img_name = matchObj1.group(1)[1:-1]
img_path = file_folder + img_name
fig_num = fig_num + 1
try:
with open(img_path, 'rb') as fg:
image = fg.read()
image_base64 = str(base64.b64encode(image), encoding='utf-8')
except:
image_base64 = "path error"
base64_data_list.append(image_base64)
base64_type_list.append(img_name[-3:])
line_mid = "[" + str(fig_num) + "]"
new_line = line_pre + "![]" + line_mid + line_bd
f2.write(new_line)
else:
img_name = matchObj2.group(1)
img_path = file_folder + img_name
fig_num = fig_num + 1
try:
with open(img_path, 'rb') as fg:
image = fg.read()
image_base64 = str(base64.b64encode(image), encoding='utf-8')
except:
image_base64 = "path error"
base64_data_list.append(image_base64)
base64_type_list.append(img_name[-3:])
line_pre = line[0:matchObj2.regs[1][0]][:-10]
line_mid = "[" + str(fig_num) + "]"
line_bd = line[matchObj2.regs[2][1]:]
new_line = line_pre + "![]" + line_mid + line_bd
f2.write(new_line)
if line == "":
break
f2.write("\n")
f2.write("\n")
for i in range(len(base64_data_list)):
if base64_type_list[i] == "svg":
# svg
f2.write("[" + str(i+1) + "]:data:image/svg+xml;base64,")
else:
f2.write("[" + str(i+1) + "]:data:image/png;base64,")
f2.write(base64_data_list[i])
f2.write("\n")
print("")
参考博客:
https://subce.gitee.io/htmls/essays/typora_base64_html.html
二、使用md2notion库
步骤:
- 下载python
- 按下win+R输入CMD,在跳出的黑窗口输入如下代码下载md2notion库
pip install md2notion
运行命令
python -m md2notion [token_v2] [page-url] […markdown_path_glob_or_url]
token_v2参数:
打开chrome浏览器 登入notion账户
点击cookie
在www.notion.so里面的cookie找到token_v2
[page-url]参数:
获取你想添加的notion的页面(新建一个空白页然后复制网址)
…markdown_path_glob_or_url md参数:
文件的路径
如: D:\md\指定名称.md (上传特定的md文件)
参考博客:
https://github.com/Cobertos/md2notion
https://www.wenyanet.com/opensource/zh/5fe7d37095285f14682f103f.html
https://zhuanlan.zhihu.com/p/412481285
https://icode.best/i/68370245455790
三、使用typora导出word,再将word导入notion
使用此方法较简单
使用typora导出word,图片已经内嵌在word中。
然后将word导入notion。此时导入的页面图片不会丢失