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

Written by

in

文章目录
  • 最简单的方法是将 .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)保证代码对齐整齐。 行间距:设置多倍行距可提高可读性。 背景色与行号:轻微灰色背景搭配行号,更适合打印或阅读。 这种方式的优势在于实现简单,代码结构完全保留,兼容性高,但缺点是无法提供语法高亮效果,对于较长或复杂代码可读性稍差。
  • 如果希望 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 更美观,适合演示文档、教程或培训资料。
  • 特性 按行插入文本 HTML 语法高亮插入 复杂度 简单 中等,需要 Pygments 可读性 一般 高,关键字、注释颜色区分明显 打印效果 普通 良好,但颜色需打印机支持 适用场景 快速生成、代码归档 教学文档、演示、报告 总结来看,如果对语法高亮要求不高,按行插入文本即可;如果希望 PDF 更美观、可读性高,HTML 高亮方式更合适。
  • 合并重复操作:在按行插入的方式中,背景色、行距、字体等可封装为函数,避免重复设置,提高代码复用性。 代码排版与打印:PDF 是固定排版格式的文档,将 Python 代码导出后可确保不同环境中显示一致,避免字体或缩进混乱。 批量处理:可将以上方法封装为函数,循环处理多个 .py 文件,实现批量生成 PDF,适合团队协作或项目文档归档。
  • 本文介绍了两种将 Python 脚本转换为 PDF 的方法:一种是按行插入文本,另一种是通过 HTML 生成语法高亮效果。前者简单高效,适合快速归档;后者美观专业,适合文档和演示场景。通过掌握 Spire.Doc 的 AppendText 和 AppendHTML 方法,以及 Pygments 的 HTML 转换能力,可以轻松生成结构清晰、可读性强的 Python PDF 文档。 无论是个人笔记整理、项目文档归档,还是教学演示,这两种方法都能满足不同需求,提高代码分享和管理的效率,同时保留排版美观性。 以上就是使用Python将.py文件转换为PDF并实现语法高亮的详细内容,更多关于Python.py文件转PDF并高亮的资料请关注风君子博客其它相关文章! 您可能感兴趣的文章: Python中.py文件和.ipynb文件的区别详解 一文教你Python引入其他文件夹下的.py文件 Python中调用和运行其他.py文件的多种实现方法 Python调用另一个py文件并传递参数常见的方法及其应用场景 python导入其它py文件的实现步骤
  • 目录
    • 1. 使用 Spire.Doc 将 Python 代码按行写入 PDF
    • 2. 使用 Pygments 生成带语法高亮的 PDF
    • 3. 两种方法的对比与使用建议
    • 4. 扩展说明
    • 总结

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

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

    最简单的方法是将 .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)保证代码对齐整齐。
    • 行间距:设置多倍行距可提高可读性。
    • 背景色与行号:轻微灰色背景搭配行号,更适合打印或阅读。

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

    如果希望 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 更美观,适合演示文档、教程或培训资料。

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

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

    • 合并重复操作:在按行插入的方式中,背景色、行距、字体等可封装为函数,避免重复设置,提高代码复用性。
    • 代码排版与打印:PDF 是固定排版格式的文档,将 Python 代码导出后可确保不同环境中显示一致,避免字体或缩进混乱。
    • 批量处理:可将以上方法封装为函数,循环处理多个 .py 文件,实现批量生成 PDF,适合团队协作或项目文档归档。

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

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

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

    您可能感兴趣的文章:

    • Python中.py文件和.ipynb文件的区别详解
    • 一文教你Python引入其他文件夹下的.py文件
    • Python中调用和运行其他.py文件的多种实现方法
    • Python调用另一个py文件并传递参数常见的方法及其应用场景
    • python导入其它py文件的实现步骤

    站内搜索