在开发工作中,我们经常需要分享或归档 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并高亮的资料请关注代码网其它相关文章!
发表评论