Python实战之markdown转pdf(包含公式转换)
作者:指尖听戏 时间:2023-11-24 12:39:34
一、Pandoc转换
1.1 问题
由于我们markdown编辑器比较特殊,一般情况下,我们不太好看,如果转换成pdf的话,我们就不需要可以的去安装各种编辑器才可以看了,所以我们有了md转pdf或者是docx的需求。
1.2 下载
资源地址
安装后,本地查看版本,是否安装成功:
出现如上图表示安装成功。
1.3 md转docx
cd进入我们需要转换的文件目录下,输入:
pandoc xxx.md -s -o xxxx.docx
-s:生成恰当的文件头部和底部。
-o:指定输出的文件。
查看实际效果:
此时发现文件已经生成好.我们打开看下,
整体转换效果还是不错的。
1.4 md转pdf
pandoc xxx.md -o xxxx.pdf --pdf-engine=xelatex
二、python库实现
使用 Typora可以直接转换
结合 wkhtmltopdf 使用 markdown 库 和 pdfkit 库
2.1 安装 wkhtmltopdf
wkhtmltopdf 下载地址
2.2 安装 mdutils
pip install markdown
pip install pdfkit
参考案例:
import pdfkit
from markdown import markdown
input = r"F:\csdn博客\pytorch\【Pytorch】pytorch安装.md"
output = r"【Pytorch】pytorch安装.pdf"
with open(input, encoding='utf-8') as f:
text = f.read()
html = markdown(text, output_format='html') # MarkDown转HTML
htmltopdf = r'D:\htmltopdf\wkhtmltopdf\bin\wkhtmltopdf.exe'
configuration = pdfkit.configuration(wkhtmltopdf=htmltopdf)
pdfkit.from_string(html, output_path=output, configuration=configuration, options={'encoding': 'utf-8'}) # HTML转PDF
但是我们此时存在一个问题,如果我们的md中有表格的话,如图:
那么转换之后会发现是乱的:
我们此时需要设定参数,修改为如下:
html = markdown(text, output_format='html',extensions=['tables'])
我们再看下效果:
2.3 引入数学公式
pip install python-markdown-math
import pdfkit
from markdown import markdown
input_filename = 'xxxx.md'
output_filename = 'xxxx.pdf'
html = '<!DOCTYPE html><body><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex/dist/katex.min.css" rel="external nofollow" crossorigin="anonymous"><script src="https://cdn.jsdelivr.net/npm/katex/dist/katex.min.js" crossorigin="anonymous"></script><script src="https://cdn.jsdelivr.net/npm/katex/dist/contrib/mathtex-script-type.min.js" defer></script>{}</body></html>'
text = '$$E=mc^2$$'
text = markdown(text, output_format='html', extensions=['mdx_math']) # MarkDown转HTML
html = html.format(text)
pdfkit.from_string(html, output_filename, options={'encoding': 'utf-8'}) # HTML转PDF
2.4 网页转pdf
import pdfkit
pdfkit.from_file('xxx.html', 'xxxx.pdf', options={'encoding': 'utf-8'}) # HTML转PDF
2.5 进度条转换
pip install pymdown-extensions
progressbar.css
.progress-label {
position: absolute;
text-align: center;
font-weight: 700;
width: 100%;
margin: 0;
line-height: 1.2rem;
white-space: nowrap;
overflow: hidden;
}
.progress-bar {
height: 1.2rem;
float: left;
background-color: #2979ff;
}
.progress {
display: block;
width: 100%;
margin: 0.5rem 0;
height: 1.2rem;
background-color: #eeeeee;
position: relative;
}
.progress.thin {
margin-top: 0.9rem;
height: 0.4rem;
}
.progress.thin .progress-label {
margin-top: -0.4rem;
}
.progress.thin .progress-bar {
height: 0.4rem;
}
.progress-100plus .progress-bar {
background-color: #00e676;
}
.progress-80plus .progress-bar {
background-color: #fbc02d;
}
.progress-60plus .progress-bar {
background-color: #ff9100;
}
.progress-40plus .progress-bar {
background-color: #ff5252;
}
.progress-20plus .progress-bar {
background-color: #ff1744;
}
.progress-0plus .progress-bar {
background-color: #f50057;
}
progressbar.py
from markdown import markdown
filename = 'progressbar.md'
html = '''
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimal-ui">
<title>progressbar</title>
<link rel="stylesheet" href="progressbar.css" rel="external nofollow" >
</head>
<body>
{}
</body>
</html>
'''
encoding = 'utf-8'
with open(filename, encoding=encoding) as f:
text = f.read()
extensions = [
'markdown.extensions.attr_list',
'pymdownx.progressbar'
]
text = markdown(text, output_format='html', extensions=extensions) # MarkDown转HTML
html = html.format(text)
print(html)
with open(filename.replace('.md', '.html'), 'w', encoding=encoding) as f:
f.write(html)
# pdfkit.from_string(html, output, options={'encoding': 'utf-8'}) # HTML转PDF
print('完成')
progressbar.md
[=0% "0%"]
[=5% "5%"]
[=25% "25%"]
[=45% "45%"]
[=65% "65%"]
[=85% "85%"]
[=100% "100%"]
[=85% "85%"]{: .candystripe}
[=100% "100%"]{: .candystripe .candystripe-animate}
[=0%]{: .thin}
[=5%]{: .thin}
[=25%]{: .thin}
[=45%]{: .thin}
[=65%]{: .thin}
[=85%]{: .thin}
[=100%]{: .thin}
我们看下最后的实际效果:
来源:https://blog.csdn.net/qq_38140292/article/details/121511178
标签:Python,markdown,pdf
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
MySQL 实现lastInfdexOf的功能案例
2024-01-20 15:16:51
pytorch:torch.mm()和torch.matmul()的使用
2022-05-25 21:32:40
python数学建模之Numpy 应用介绍与Pandas学习
2022-09-13 07:39:32
![](https://img.aspxhome.com/file/2023/0/121530_0s.png)
Python实现堆排序的方法详解
2023-12-02 07:43:20
![](https://img.aspxhome.com/file/2023/9/84119_0s.jpg)
python 爬取B站原视频的实例代码
2023-03-06 04:08:43
可以自动轮换的页签 tabs
2008-02-21 12:25:00
Python的__builtin__模块中的一些要点知识
2022-10-08 01:46:23
解决GOPATH在GOLAND中的坑
2023-07-12 23:46:16
![](https://img.aspxhome.com/file/2023/0/97170_0s.jpg)
MYSQL字符串强转的方法示例
2024-01-13 10:38:58
pycharm2022.2远程连接服务器调试代码实现
2022-11-17 12:12:48
![](https://img.aspxhome.com/file/2023/6/114646_0s.jpg)
python3爬虫学习之数据存储txt的案例详解
2022-01-17 05:02:09
![](https://img.aspxhome.com/file/2023/6/113176_0s.png)
107条javascript(js)常用小技巧
2007-10-30 12:40:00
wxPython实现整点报时
2023-06-11 05:25:39
distinct 多列问题结合group by的解决方法
2024-01-21 11:18:23
Linux下rpm方式安装mysql教程
2024-01-21 07:40:53
python中rc1什么意思
2023-10-24 13:01:38
python多线程、网络编程、正则表达式详解
2023-03-03 21:33:14
![](https://img.aspxhome.com/file/2023/9/72899_0s.png)
python+opencv实现堆叠图片
2023-07-19 21:22:45
![](https://img.aspxhome.com/file/2023/8/105588_0s.jpg)
聊一聊MyISAM和InnoDB的区别
2024-01-21 00:55:33
对python实时得到鼠标位置的示例讲解
2022-02-21 10:01:25
![](https://img.aspxhome.com/file/2023/0/85380_0s.jpg)