文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python中如何实现markdown转pdf

2023-06-22 02:17

关注

这篇文章主要介绍Python中如何实现markdown转pdf,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

一、Pandoc转换

1.1 问题

由于我们markdown编辑器比较特殊,一般情况下,我们不太好看,如果转换成pdf的话,我们就不需要可以的去安装各种编辑器才可以看了,所以我们有了md转pdf或者是docx的需求。

1.2 下载

资源地址

安装后,本地查看版本,是否安装成功:

Python中如何实现markdown转pdf

出现如上图表示安装成功。

1.3 md转docx

cd进入我们需要转换的文件目录下,输入:

pandoc xxx.md -s -o xxxx.docx

-s:生成恰当的文件头部和底部。

-o:指定输出的文件。

查看实际效果:

Python中如何实现markdown转pdf

Python中如何实现markdown转pdf

此时发现文件已经生成好.我们打开看下,

Python中如何实现markdown转pdf

整体转换效果还是不错的。

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 markdownpip install pdfkit

参考案例:

import pdfkitfrom markdown import markdowninput = 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转HTMLhtmltopdf = 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中有表格的话,如图:

Python中如何实现markdown转pdf

那么转换之后会发现是乱的:

Python中如何实现markdown转pdf

我们此时需要设定参数,修改为如下:

html = markdown(text, output_format='html',extensions=['tables'])

我们再看下效果:

Python中如何实现markdown转pdf

2.3 引入数学公式

pip install python-markdown-math
import pdfkitfrom markdown import markdowninput_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转HTMLhtml = html.format(text)pdfkit.from_string(html, output_filename, options={'encoding': 'utf-8'})  # HTML转PDF

2.4 网页转pdf

import pdfkitpdfkit.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 markdownfilename = '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转HTMLhtml = 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转PDFprint('完成')

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}

我们看下最后的实际效果:

Python中如何实现markdown转pdf

以上是“Python中如何实现markdown转pdf”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯