python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python.py文件转PDF并高亮

使用Python将.py文件转换为PDF并实现语法高亮

作者:大丸子

在开发工作中,我们经常需要分享或归档 Python 脚本文件,.py 文件虽然在编辑器中可读性强,但直接发送给他人时,缺乏格式统一、排版美观,且打印体验不佳,Python 生态中有多种方式可以实现代码转 PDF,本文将介绍两种常见的实现方法,需要的朋友可以参考下

在开发工作中,我们经常需要分享或归档 Python 脚本文件。.py 文件虽然在编辑器中可读性强,但直接发送给他人时,缺乏格式统一、排版美观,且打印体验不佳。尤其是在技术文档、培训资料或项目报告中,将代码转换为 PDF 不仅便于阅读,也能保证跨平台展示效果一致。

Python 生态中有多种方式可以实现代码转 PDF,而 Free Spire.Doc for Python 提供了稳定、易用的方案。本文将介绍两种常见的实现方法:普通文本方式带语法高亮的 HTML 插入方式,并详细分析两者的差异与使用场景。

1. 使用 Spire.Doc 将 Python 代码按行写入 PDF

最简单的方法是将 .py 文件逐行读取,并将每一行以固定字体插入到 PDF 中。这种方式适合不需要语法高亮,只希望保留原始代码排版的场景。

from spire.doc import Document, FileFormat, BreakType, Color, LineSpacingRule, LineNumberingRestartMode

# 读取 Python 文件
with open("Python.py", "r", encoding="utf-8") as f:
    python_code = f.read()

# 创建文档对象
doc = Document()
section = doc.AddSection()
paragraph = section.AddParagraph()

# 逐行添加代码
for line_number, line in enumerate(python_code.split("\n")):
    tr = paragraph.AppendText(line)
    tr.CharacterFormat.FontName = "Courier New"  # 设置等宽字体
    tr.CharacterFormat.FontSize = 10.5
    if line_number < len(python_code.split("\n")) - 1:
        paragraph.AppendBreak(BreakType.LineBreak)

# 可选格式设置
paragraph.Format.BackColor = Color.get_WhiteSmoke()  # 背景色
paragraph.Format.LineSpacingRule = LineSpacingRule.Multiple
paragraph.Format.LineSpacing = 14.0

# 行号设置
section.PageSetup.LineNumberingStartValue = 1
section.PageSetup.LineNumberingStep = 1
section.PageSetup.LineNumberingRestartMode = LineNumberingRestartMode.RestartPage
section.PageSetup.LineNumberingDistanceFromText = 12.0

# 保存为 PDF
doc.SaveToFile("output/Python-PDF.pdf", FileFormat.PDF)

转换结果:

说明与优化点

这种方式的优势在于实现简单,代码结构完全保留,兼容性高,但缺点是无法提供语法高亮效果,对于较长或复杂代码可读性稍差。

2. 使用 Pygments 生成带语法高亮的 PDF

如果希望 PDF 中的代码带颜色区分关键字、注释、字符串等,可以先使用 Pygments 将 Python 代码转换为 HTML,再通过 Spire.Doc 将 HTML 插入 PDF。

from spire.doc import Document, FileFormat
from pygments import highlight
from pygments.lexers import PythonLexer
from pygments.formatters import HtmlFormatter

def py_to_inline_html(py_file_path):
    with open(py_file_path, "r", encoding="utf-8") as f:
        code = f.read()
    # 生成行内 HTML,带行号
    formatter = HtmlFormatter(noclasses=True, linenostart=1, linenos='inline')
    return highlight(code, PythonLexer(), formatter)

html_result = py_to_inline_html("Python.py")

doc = Document()
section = doc.AddSection()
paragraph = section.AddParagraph()
paragraph.AppendHTML(html_result)

# 保存带高亮的 PDF
doc.SaveToFile("output/Python-PDF-Highlighted.pdf", FileFormat.PDF)

转换结果:

关键说明

3. 两种方法的对比与使用建议

特性按行插入文本HTML 语法高亮插入
复杂度简单中等,需要 Pygments
可读性一般高,关键字、注释颜色区分明显
打印效果普通良好,但颜色需打印机支持
适用场景快速生成、代码归档教学文档、演示、报告

总结来看,如果对语法高亮要求不高,按行插入文本即可;如果希望 PDF 更美观、可读性高,HTML 高亮方式更合适。

4. 扩展说明

总结

本文介绍了两种将 Python 脚本转换为 PDF 的方法:一种是按行插入文本,另一种是通过 HTML 生成语法高亮效果。前者简单高效,适合快速归档;后者美观专业,适合文档和演示场景。通过掌握 Spire.Doc 的 AppendText 和 AppendHTML 方法,以及 Pygments 的 HTML 转换能力,可以轻松生成结构清晰、可读性强的 Python PDF 文档。

无论是个人笔记整理、项目文档归档,还是教学演示,这两种方法都能满足不同需求,提高代码分享和管理的效率,同时保留排版美观性。

以上就是使用Python将.py文件转换为PDF并实现语法高亮的详细内容,更多关于Python.py文件转PDF并高亮的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文