** 本程序所需第三方环境如下 **
- pandoc
- pip install pywin32
- word
程序思想
- 将markdown转为docx文件,直接转换成pdf的话,需要安装配置tex环境,过于繁杂。利用pandoc md文件 -o docx文件,实现转换
- 将docx转为pdf,通过pywin32调用word来实现相关功能
- 此后,删除中间生成的docx文件
- 通过调整参数(func),选择是否将pdf文件留在当前目录下,或将文件输出值统一文件夹中
- 代码如下,程序默认参数将文件输出到当前目录下
- dirname可根据需要,设置需要转换的文件夹路径
# 待安装环境pandoc~~操作本质是os.system调用命令行执行该程序
# pip install pywin32
# 调用了word环境
import os
import shutil
from win32com.client import constants, gencache
# markdown文件转换模块 markdown——>docx
def path(dir_path, func):
"""
:param dir_path: 目标转换文件夹路径
:param func: 功能 数字1:将markdown转换为doc 数字2:将doc转换为pdf 数字3: 将生成的pdf文件,移动到D:/filestorage目录下
:return:
"""
# os.walk输出当前目录下所有文件
# x路径名, y文件夹名, z文件名
for i in range(func):
for x, y, z in os.walk(dir_path):
for filename in z:
# 分割文件名和后缀名
suffix_name = os.path.splitext(filename)[1]
prefix_name = os.path.splitext(filename)[0]
filepath = x + '\\' + filename
outfilepath = x + '\\' + prefix_name
if i == 0:
if suffix_name == '.md':
print('pandoc ' + '"' + filepath + '"' + ' -o ' + x + '\\' + os.path.splitext(filename)[0] + '.docx')
os.system('pandoc ' + '"' + filepath + '"' + ' -o ' + '"' + x + '\\' + os.path.splitext(filename)[
0] + '.docx' + '"')
elif i == 1:
if suffix_name == '.docx':
createPdf(filepath, outfilepath)
os.remove(filepath)
elif i == 2:
if suffix_name == '.pdf':
# 不存在该目录,则利用mkdir进行创建
if not os.path.exists('D:\\filestorage\\'):
os.mkdir('D:\\filestorage\\')
shutil.move(filepath, 'D:\\filestorage\\'+prefix_name+'.pdf')
# docx文件转换模块 docx——>pdf
def createPdf(wordpath, pdfpath):
"""
:param wordpath: 目标word路径
:param pdfpath: 生成pdf路径
:return:
"""
word = gencache.EnsureDispatch('Word.Application')
doc = word.Documents.Open(wordpath, ReadOnly=1)
doc.ExportAsFixedFormat(pdfpath,
constants.wdExportFormatPDF,
Item=constants.wdExportDocumentWithMarkup,
CreateBookmarks=constants.wdExportCreateHeadingBookmarks)
word.Quit(constants.wdDoNotSaveChanges)
if __name__ == '__main__':
dirname = r'D:\坚果云\Markdown\海南大学 大三课程笔记\网络工程'
path(dirname, 2)