typora嵌入图片&typora转notion

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库

步骤:

  1. 下载python
  2. 按下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。此时导入的页面图片不会丢失

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值