最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Python將.py文件轉(zhuǎn)換為PDF并實(shí)現(xiàn)語(yǔ)法高亮

 更新時(shí)間:2025年12月02日 08:43:56   作者:大丸子  
在開(kāi)發(fā)工作中,我們經(jīng)常需要分享或歸檔 Python 腳本文件,.py 文件雖然在編輯器中可讀性強(qiáng),但直接發(fā)送給他人時(shí),缺乏格式統(tǒng)一、排版美觀,且打印體驗(yàn)不佳,Python 生態(tài)中有多種方式可以實(shí)現(xiàn)代碼轉(zhuǎn) PDF,本文將介紹兩種常見(jiàn)的實(shí)現(xiàn)方法,需要的朋友可以參考下

在開(kāi)發(fā)工作中,我們經(jīng)常需要分享或歸檔 Python 腳本文件。.py 文件雖然在編輯器中可讀性強(qiáng),但直接發(fā)送給他人時(shí),缺乏格式統(tǒng)一、排版美觀,且打印體驗(yàn)不佳。尤其是在技術(shù)文檔、培訓(xùn)資料或項(xiàng)目報(bào)告中,將代碼轉(zhuǎn)換為 PDF 不僅便于閱讀,也能保證跨平臺(tái)展示效果一致。

Python 生態(tài)中有多種方式可以實(shí)現(xiàn)代碼轉(zhuǎn) PDF,而 Free Spire.Doc for Python 提供了穩(wěn)定、易用的方案。本文將介紹兩種常見(jiàn)的實(shí)現(xiàn)方法:普通文本方式帶語(yǔ)法高亮的 HTML 插入方式,并詳細(xì)分析兩者的差異與使用場(chǎng)景。

1. 使用 Spire.Doc 將 Python 代碼按行寫(xiě)入 PDF

最簡(jiǎn)單的方法是將 .py 文件逐行讀取,并將每一行以固定字體插入到 PDF 中。這種方式適合不需要語(yǔ)法高亮,只希望保留原始代碼排版的場(chǎng)景。

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()

# 創(chuàng)建文檔對(duì)象
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"  # 設(shè)置等寬字體
    tr.CharacterFormat.FontSize = 10.5
    if line_number < len(python_code.split("\n")) - 1:
        paragraph.AppendBreak(BreakType.LineBreak)

# 可選格式設(shè)置
paragraph.Format.BackColor = Color.get_WhiteSmoke()  # 背景色
paragraph.Format.LineSpacingRule = LineSpacingRule.Multiple
paragraph.Format.LineSpacing = 14.0

# 行號(hào)設(shè)置
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)

轉(zhuǎn)換結(jié)果:

說(shuō)明與優(yōu)化點(diǎn)

  • 字體選擇:使用等寬字體(如 Courier New)保證代碼對(duì)齊整齊。
  • 行間距:設(shè)置多倍行距可提高可讀性。
  • 背景色與行號(hào):輕微灰色背景搭配行號(hào),更適合打印或閱讀。

這種方式的優(yōu)勢(shì)在于實(shí)現(xiàn)簡(jiǎn)單,代碼結(jié)構(gòu)完全保留,兼容性高,但缺點(diǎn)是無(wú)法提供語(yǔ)法高亮效果,對(duì)于較長(zhǎng)或復(fù)雜代碼可讀性稍差。

2. 使用 Pygments 生成帶語(yǔ)法高亮的 PDF

如果希望 PDF 中的代碼帶顏色區(qū)分關(guān)鍵字、注釋、字符串等,可以先使用 Pygments 將 Python 代碼轉(zhuǎn)換為 HTML,再通過(guò) 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()
    # 生成行內(nèi) HTML,帶行號(hào)
    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)

轉(zhuǎn)換結(jié)果:

關(guān)鍵說(shuō)明

  • HtmlFormatter(noclasses=True, linenos='inline'):生成內(nèi)聯(lián)樣式 HTML,并帶行號(hào)。
  • AppendHTML 方法可以直接將 HTML 內(nèi)容插入到 PDF,保留語(yǔ)法高亮效果。
  • 使用這種方法生成的 PDF 更美觀,適合演示文檔、教程或培訓(xùn)資料。

3. 兩種方法的對(duì)比與使用建議

特性按行插入文本HTML 語(yǔ)法高亮插入
復(fù)雜度簡(jiǎn)單中等,需要 Pygments
可讀性一般高,關(guān)鍵字、注釋顏色區(qū)分明顯
打印效果普通良好,但顏色需打印機(jī)支持
適用場(chǎng)景快速生成、代碼歸檔教學(xué)文檔、演示、報(bào)告

總結(jié)來(lái)看,如果對(duì)語(yǔ)法高亮要求不高,按行插入文本即可;如果希望 PDF 更美觀、可讀性高,HTML 高亮方式更合適。

4. 擴(kuò)展說(shuō)明

  • 合并重復(fù)操作:在按行插入的方式中,背景色、行距、字體等可封裝為函數(shù),避免重復(fù)設(shè)置,提高代碼復(fù)用性。
  • 代碼排版與打印:PDF 是固定排版格式的文檔,將 Python 代碼導(dǎo)出后可確保不同環(huán)境中顯示一致,避免字體或縮進(jìn)混亂。
  • 批量處理:可將以上方法封裝為函數(shù),循環(huán)處理多個(gè) .py 文件,實(shí)現(xiàn)批量生成 PDF,適合團(tuán)隊(duì)協(xié)作或項(xiàng)目文檔歸檔。

總結(jié)

本文介紹了兩種將 Python 腳本轉(zhuǎn)換為 PDF 的方法:一種是按行插入文本,另一種是通過(guò) HTML 生成語(yǔ)法高亮效果。前者簡(jiǎn)單高效,適合快速歸檔;后者美觀專(zhuān)業(yè),適合文檔和演示場(chǎng)景。通過(guò)掌握 Spire.Doc 的 AppendText 和 AppendHTML 方法,以及 Pygments 的 HTML 轉(zhuǎn)換能力,可以輕松生成結(jié)構(gòu)清晰、可讀性強(qiáng)的 Python PDF 文檔。

無(wú)論是個(gè)人筆記整理、項(xiàng)目文檔歸檔,還是教學(xué)演示,這兩種方法都能滿(mǎn)足不同需求,提高代碼分享和管理的效率,同時(shí)保留排版美觀性。

以上就是使用Python將.py文件轉(zhuǎn)換為PDF并實(shí)現(xiàn)語(yǔ)法高亮的詳細(xì)內(nèi)容,更多關(guān)于Python.py文件轉(zhuǎn)PDF并高亮的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python?requests下載文件的幾種常用方法(附代碼)

    Python?requests下載文件的幾種常用方法(附代碼)

    這篇文章主要介紹了五種下載方式的實(shí)現(xiàn)方法,包括基礎(chǔ)下載、大文件分塊下載、帶有斷點(diǎn)續(xù)傳的下載、帶有超時(shí)和重試的下載以及完整的下載器實(shí)現(xiàn),文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下
    2025-03-03
  • python實(shí)現(xiàn)b站直播自動(dòng)發(fā)送彈幕功能

    python實(shí)現(xiàn)b站直播自動(dòng)發(fā)送彈幕功能

    這篇文章主要介紹了python如何實(shí)現(xiàn)b站直播自動(dòng)發(fā)送彈幕,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-02-02
  • Python異常處理操作舉例詳細(xì)教程

    Python異常處理操作舉例詳細(xì)教程

    異常處理的能力是一門(mén)語(yǔ)言好壞的重要特征,python也提供了強(qiáng)大的異常處理功能,這篇文章主要介紹了Python異常處理操作的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-05-05
  • Python實(shí)現(xiàn)遺傳算法(二進(jìn)制編碼)求函數(shù)最優(yōu)值方式

    Python實(shí)現(xiàn)遺傳算法(二進(jìn)制編碼)求函數(shù)最優(yōu)值方式

    今天小編就為大家分享一篇Python實(shí)現(xiàn)遺傳算法(二進(jìn)制編碼)求函數(shù)最優(yōu)值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • pandas df.sample()的使用

    pandas df.sample()的使用

    本文主要介紹了pandas df.sample()的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Python 經(jīng)典貪心算法之Prim算法案例詳解

    Python 經(jīng)典貪心算法之Prim算法案例詳解

    這篇文章主要介紹了Python 經(jīng)典貪心算法之Prim算法案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • Django結(jié)合ajax進(jìn)行頁(yè)面實(shí)時(shí)更新的例子

    Django結(jié)合ajax進(jìn)行頁(yè)面實(shí)時(shí)更新的例子

    今天小編就為大家分享一篇Django結(jié)合ajax進(jìn)行頁(yè)面實(shí)時(shí)更新的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • 使用python進(jìn)行廣告點(diǎn)擊率的預(yù)測(cè)的實(shí)現(xiàn)

    使用python進(jìn)行廣告點(diǎn)擊率的預(yù)測(cè)的實(shí)現(xiàn)

    這篇文章主要介紹了使用python進(jìn)行廣告點(diǎn)擊率的預(yù)測(cè)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • python 實(shí)現(xiàn)mysql自動(dòng)增刪分區(qū)的方法

    python 實(shí)現(xiàn)mysql自動(dòng)增刪分區(qū)的方法

    這篇文章主要介紹了python 實(shí)現(xiàn)mysql自動(dòng)增刪分區(qū)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Pytorch之view及view_as使用詳解

    Pytorch之view及view_as使用詳解

    今天小編就為大家分享一篇Pytorch之view及view_as使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12

最新評(píng)論

花莲市| 丘北县| 宁明县| 凌云县| 阿克陶县| 香河县| 大埔县| 贵州省| 深水埗区| 肥乡县| 眉山市| 保定市| 丘北县| 涿鹿县| 庆城县| 海口市| 安庆市| 孝义市| 衡南县| 翼城县| 彭州市| 东方市| 无棣县| 盐津县| 环江| 沈阳市| 炎陵县| 贺州市| 嫩江县| 金华市| 宁晋县| 象州县| 文水县| 广州市| 新沂市| 建瓯市| 同仁县| 黄冈市| 乐山市| 台东县| 当雄县|