方法:
会导致Pandoc编译速度慢,甚至内存堆栈不足,其实不推荐,只是好玩。
首先把需要内嵌的图片做成base64
形式的字符,然后用类似下列形式放置文件尾:
[fire]:data:image/png;base64,iVBORw0KGgoA............
然后markdown中引用id:
![描述][fire]
base64图片编码示例程序:
需要注意的是,b64encode()
返回的是byte
类型,所以要转为string
。
import os
import base64
#指定Markdown文件名
attrc = "attrc.md"
#获取目录下png文件名
def getPngFile(path, suffix) :
pngFile = []
allFile = os.listdir(path)
for i in allFile :
if os.path.splitext(i)[1] == suffix :
pngFile.append(i)
return pngFile
def writeMd(file):
#使用"."分割得到文件前缀
prefix = file.split('.')[0]
#markdown语法
mdImage = "[{}]:data:image/png;base64,{}\n\n"
#base64编码图片,得到临时字节
with open(file, 'rb') as fr:
tdata = base64.b64encode(fr.read()).decode()
#转为字符
data = mdImage.format(prefix, tdata)
with open(attrc, 'a+') as fw:
fw.write(data)
if __name__ == '__main__' :
#自定义排序字母表
aorder = ['f', 'w', 's', 't', 'l', 'd', 'n']
#png文件表获取
path = os.getcwd()
pngFile = getPngFile(path, ".png")
#排序下文件名
pngFile.sort(key=lambda x:aorder.index(x[0]))
#清除旧文件,需要绝对路径
tattrc = path + '/' + attrc
if os.path.exists(tattrc) :
os.remove(tattrc)
#写入Base64编码字符串
for s in pngFile :
writeMd(s)
其实用BASH命令可能更快:
img=$(cat xx.png|base64)
printf "%s" $img
然后重定向到文件中,稍微修改一下即可。
制作该文档的命令
pandoc -s --metadata title="TheLegendOfDragoon" --highlight-style=pygments --css=any.css attrc.md -o attrc.epub
如果有多个md文件,也很简单,把文件名按顺序写入一个mdlist.txt文件,然后使用bash命令替换功能:
pandoc-s--metadatatitle="TheLegendOfDragoon"--highlight-style=pygments--css=any.css $(cat mdlist.txt) -o attrc.epub
如果有数学公式插入,加参数--mathjax
,为了epub中显示数学公式,需要转为图片,加参数--webtex
即可。