使用Python将.py文件转换为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)转换结果:

说明与优化点:
- 字体选择:使用等宽字体(如 Courier New)保证代码对齐整齐。
- 行间距:设置多倍行距可提高可读性。
- 背景色与行号:轻微灰色背景搭配行号,更适合打印或阅读。
这种方式的优势在于实现简单,代码结构完全保留,兼容性高,但缺点是无法提供语法高亮效果,对于较长或复杂代码可读性稍差。
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)转换结果:

关键说明:
HtmlFormatter(noclasses=True, linenos='inline'):生成内联样式 HTML,并带行号。AppendHTML方法可以直接将 HTML 内容插入到 PDF,保留语法高亮效果。- 使用这种方法生成的 PDF 更美观,适合演示文档、教程或培训资料。
3. 两种方法的对比与使用建议
| 特性 | 按行插入文本 | HTML 语法高亮插入 |
|---|---|---|
| 复杂度 | 简单 | 中等,需要 Pygments |
| 可读性 | 一般 | 高,关键字、注释颜色区分明显 |
| 打印效果 | 普通 | 良好,但颜色需打印机支持 |
| 适用场景 | 快速生成、代码归档 | 教学文档、演示、报告 |
总结来看,如果对语法高亮要求不高,按行插入文本即可;如果希望 PDF 更美观、可读性高,HTML 高亮方式更合适。
4. 扩展说明
- 合并重复操作:在按行插入的方式中,背景色、行距、字体等可封装为函数,避免重复设置,提高代码复用性。
- 代码排版与打印:PDF 是固定排版格式的文档,将 Python 代码导出后可确保不同环境中显示一致,避免字体或缩进混乱。
- 批量处理:可将以上方法封装为函数,循环处理多个
.py文件,实现批量生成 PDF,适合团队协作或项目文档归档。
总结
本文介绍了两种将 Python 脚本转换为 PDF 的方法:一种是按行插入文本,另一种是通过 HTML 生成语法高亮效果。前者简单高效,适合快速归档;后者美观专业,适合文档和演示场景。通过掌握 Spire.Doc 的 AppendText 和 AppendHTML 方法,以及 Pygments 的 HTML 转换能力,可以轻松生成结构清晰、可读性强的 Python PDF 文档。
无论是个人笔记整理、项目文档归档,还是教学演示,这两种方法都能满足不同需求,提高代码分享和管理的效率,同时保留排版美观性。
以上就是使用Python将.py文件转换为PDF并实现语法高亮的详细内容,更多关于Python.py文件转PDF并高亮的资料请关注脚本之家其它相关文章!


最新评论