Python 语言 用 Python+Pdfkit 将 Markdown 笔记转成 PDF 带目录 + 代码高亮

Python阿木 发布于 1 天前 3 次阅读


Python+Pdfkit 将 Markdown 笔记转成 PDF(带目录 + 代码高亮)

Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成结构化的HTML格式。随着信息量的爆炸式增长,Markdown 已经成为许多开发者、设计师和内容创作者的首选笔记工具。Markdown 文档在阅读和分享时,往往需要转换为 PDF 格式。本文将介绍如何使用 Python 和 Pdfkit 库将 Markdown 笔记转换为带有目录和代码高亮的 PDF 文件。

准备工作

在开始之前,请确保您已经安装了以下软件和库:

- Python 3.x
- Pdfkit
- Markdown
- Pygments(用于代码高亮)

您可以通过以下命令安装所需的库:

bash
pip install pdfkit markdown pygments

安装 Pdfkit

Pdfkit 是一个将 HTML 转换为 PDF 的工具,它依赖于 wkhtmltopdf。以下是安装 Pdfkit 的步骤:

1. 下载并安装 wkhtmltopdf:[wkhtmltopdf 官网](https://wkhtmltopdf.org/downloads.html)
2. 在命令行中,找到安装 wkhtmltopdf 的路径,例如 `/usr/local/bin/wkhtmltopdf`。
3. 在 Python 中,设置 Pdfkit 的路径:

python
import pdfkit
pdfkit.conf.wkhtmltopdf = '/path/to/wkhtmltopdf'

转换 Markdown 为 HTML

我们需要将 Markdown 文档转换为 HTML。Python 的 `markdown` 库可以帮助我们完成这个任务。

python
import markdown

def markdown_to_html(markdown_content):
html_content = markdown.markdown(markdown_content)
return html_content

代码高亮

为了在 PDF 中实现代码高亮,我们需要使用 Pygments 库。以下是一个将代码转换为高亮 HTML 的函数:

python
from pygments import highlight
from pygments.formatters import HtmlFormatter
from pygments.lexers import get_lexer_by_name

def code_highlight(code, language):
lexer = get_lexer_by_name(language)
formatter = HtmlFormatter()
return highlight(code, lexer, formatter)

创建目录

在 PDF 中添加目录,我们需要使用 `reportlab` 库。以下是一个简单的示例,展示如何创建目录:

python
from reportlab.lib.pagesizes import letter
from reportlab.lib import styles
from reportlab.platypus import SimpleDocTemplate, TableOfContents, Paragraph

def create_pdf_with_toc(html_content, output_path):
doc = SimpleDocTemplate(output_path, pagesize=letter)
styles = styles.getSampleStyleSheet()
story = [Paragraph('Table of Contents', styles['Title'])]
story.append(TableOfContents())
story.append(Paragraph(html_content, styles['Normal']))
doc.build(story)

整合代码

现在,我们将所有这些组件整合到一个函数中,以便将 Markdown 文档转换为带有目录和代码高亮的 PDF 文件。

python
def markdown_to_pdf(markdown_content, output_path, toc=True):
html_content = markdown_to_html(markdown_content)
if toc:
html_content = create_pdf_with_toc(html_content, output_path)
else:
html_content = html_content.replace('

', '')
pdfkit.from_string(html_content, output_path)

示例

以下是一个使用上述函数将 Markdown 转换为 PDF 的示例:

python
markdown_content = """
标题

这是一个标题。

python
def hello_world():
print("Hello, world!")

这是一个代码块。
"""

output_path = 'output.pdf'
markdown_to_pdf(markdown_content, output_path)

这将生成一个名为 `output.pdf` 的 PDF 文件,其中包含标题和代码块,并且有目录。

总结

本文介绍了如何使用 Python 和 Pdfkit 将 Markdown 笔记转换为带有目录和代码高亮的 PDF 文件。通过整合 Markdown、代码高亮和 PDF 转换技术,我们可以轻松地创建专业且易于分享的文档。希望这篇文章能帮助您更好地理解和应用这些技术。