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

 更新时间:2025年12月02日 08:43:56   作者:大丸子  
在开发工作中,我们经常需要分享或归档 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)

转换结果:

说明与优化点

  • 字体选择:使用等宽字体(如 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并高亮的资料请关注脚本之家其它相关文章!

相关文章

  • python做http代理请求的项目实践

    python做http代理请求的项目实践

    本文主要介绍了使用Python Flask实现HTTP代理服务器的解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-03-03
  • 解决tensorflow模型压缩的问题_踩坑无数,总算搞定

    解决tensorflow模型压缩的问题_踩坑无数,总算搞定

    这篇文章主要介绍了解决tensorflow模型压缩的问题_踩坑无数,总算搞定!希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 把vgg-face.mat权重迁移到pytorch模型示例

    把vgg-face.mat权重迁移到pytorch模型示例

    今天小编就为大家分享一篇把vgg-face.mat权重迁移到pytorch模型示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • 使用Python通过代码创建图表的详细步骤

    使用Python通过代码创建图表的详细步骤

    这篇文章主要介绍了使用Python通过代码创建图表的详细步骤,文中介绍了如何使用DiagramasCode工具创建基础架构的架构图,并通过Python脚本生成并上传到对象存储桶,需要的朋友可以参考下
    2024-12-12
  • python logging模块的使用详解

    python logging模块的使用详解

    这篇文章主要介绍了python logging模块的使用,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-10-10
  • 解析Anaconda创建python虚拟环境的问题

    解析Anaconda创建python虚拟环境的问题

    这篇文章主要介绍了Anaconda创建python虚拟环境,包括虚拟环境管理、虚拟环境中python包管理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • Python自动化实现日报数据可视化

    Python自动化实现日报数据可视化

    这篇文章主要为大家详细介绍了如何使用Python实现自动化生成日报数据可视化,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-02-02
  • 详解Python中数据库管理模块shelve和dbm的应用

    详解Python中数据库管理模块shelve和dbm的应用

    作为常用的 python 自带数据库管理模块,shelve 和 dbm 都是非常方便的对象持久化存储和检索工具,本文将从用法、优势以及不同点等方面进行介绍,希望对大家有所帮助
    2023-10-10
  • python 中的divmod数字处理函数浅析

    python 中的divmod数字处理函数浅析

    这篇文章主要介绍了python divmod数字处理函数的相关资料,感兴趣的朋友一起看看吧
    2017-10-10
  • matplotlib绘制正余弦曲线图的实现

    matplotlib绘制正余弦曲线图的实现

    这篇文章主要介绍了matplotlib绘制正余弦曲线图的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02

最新评论