目标
先写这篇文章的目标,就是把一个markdown转换成pdf,支持markdown的一些格式,包括数学公式。
代码
import os
import markdown
import pdfkit
WKHTMLTOPDF = r"C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe" # 改成你自己的路径
def md_to_pdf(md_path: str, pdf_path: str):
with open(md_path, "r", encoding="utf-8") as f:
md_text = f.read()
body = markdown.markdown(md_text, output_format="html5")
html = f"""
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Markdown with MathJax v2</title>
<style>
body {{
font-family: "Microsoft YaHei","PingFang SC","Segoe UI",sans-serif;
margin: 40px;
line-height: 1.6;
font-size: 14px;
}}
</style>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({{
tex2jax: {{
inlineMath: [['$','$'], ['\\\\(','\\\\)']],
displayMath: [['$$','$$'], ['\\\\[','\\\\]']],
processEscapes: true
}}
}});
</script>
<script src="https://cdn.jsdelivr.net/npm/mathjax@2/MathJax.js?config=TeX-MML-AM_CHTML"></script>
</head>
<body>
{body}
</body>
</html>
"""
config = pdfkit.configuration(wkhtmltopdf=WKHTMLTOPDF)
options = {
"enable-javascript": "",
"javascript-delay": "5000",
"no-stop-slow-scripts": "",
"enable-local-file-access": "",
"quiet": ""
}
pdfkit.from_string(html, pdf_path, configuration=config, options=options)
print("PDF 生成:", os.path.abspath(pdf_path))
if __name__ == "__main__":
md_to_pdf("test.md", "test_math_mj2.pdf")
测试markdown文件

markdown文件大概是这样的。
本地安装软件
本地安装下软件,wkhtmltox-0.12.6-1.msvc2015-win64.exe,我在windows上测试的,也有其他对应的平台;这个是把它转换成pdf的软件;相当于python调用它做了转换。
结果

小结
其实,还算是一个简单的方案;不过,不是唯一方案,还有其他可选的,这只是一种解决方案,仅供参考。还是要学习下底层程序,如C++,有兴趣,可以去这里看看;下一篇,再介绍另外一种方案。
Markdown转PDF方案解析

被折叠的 条评论
为什么被折叠?



