使用Python將.py文件轉(zhuǎn)換為PDF并實現(xiàn)語法高亮
在開發(fā)工作中,我們經(jīng)常需要分享或歸檔 Python 腳本文件。.py 文件雖然在編輯器中可讀性強,但直接發(fā)送給他人時,缺乏格式統(tǒng)一、排版美觀,且打印體驗不佳。尤其是在技術(shù)文檔、培訓資料或項目報告中,將代碼轉(zhuǎn)換為 PDF 不僅便于閱讀,也能保證跨平臺展示效果一致。
Python 生態(tài)中有多種方式可以實現(xiàn)代碼轉(zhuǎn) PDF,而 Free Spire.Doc for Python 提供了穩(wěn)定、易用的方案。本文將介紹兩種常見的實現(xiàn)方法:普通文本方式和帶語法高亮的 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()
# 創(chuàng)建文檔對象
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
# 行號設(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é)果:

說明與優(yōu)化點:
- 字體選擇:使用等寬字體(如 Courier New)保證代碼對齊整齊。
- 行間距:設(shè)置多倍行距可提高可讀性。
- 背景色與行號:輕微灰色背景搭配行號,更適合打印或閱讀。
這種方式的優(yōu)勢在于實現(xiàn)簡單,代碼結(jié)構(gòu)完全保留,兼容性高,但缺點是無法提供語法高亮效果,對于較長或復雜代碼可讀性稍差。
2. 使用 Pygments 生成帶語法高亮的 PDF
如果希望 PDF 中的代碼帶顏色區(qū)分關(guān)鍵字、注釋、字符串等,可以先使用 Pygments 將 Python 代碼轉(zhuǎn)換為 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()
# 生成行內(nèi) 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)轉(zhuǎn)換結(jié)果:

關(guān)鍵說明:
HtmlFormatter(noclasses=True, linenos='inline'):生成內(nèi)聯(lián)樣式 HTML,并帶行號。AppendHTML方法可以直接將 HTML 內(nèi)容插入到 PDF,保留語法高亮效果。- 使用這種方法生成的 PDF 更美觀,適合演示文檔、教程或培訓資料。
3. 兩種方法的對比與使用建議
| 特性 | 按行插入文本 | HTML 語法高亮插入 |
|---|---|---|
| 復雜度 | 簡單 | 中等,需要 Pygments |
| 可讀性 | 一般 | 高,關(guān)鍵字、注釋顏色區(qū)分明顯 |
| 打印效果 | 普通 | 良好,但顏色需打印機支持 |
| 適用場景 | 快速生成、代碼歸檔 | 教學文檔、演示、報告 |
總結(jié)來看,如果對語法高亮要求不高,按行插入文本即可;如果希望 PDF 更美觀、可讀性高,HTML 高亮方式更合適。
4. 擴展說明
- 合并重復操作:在按行插入的方式中,背景色、行距、字體等可封裝為函數(shù),避免重復設(shè)置,提高代碼復用性。
- 代碼排版與打印:PDF 是固定排版格式的文檔,將 Python 代碼導出后可確保不同環(huán)境中顯示一致,避免字體或縮進混亂。
- 批量處理:可將以上方法封裝為函數(shù),循環(huán)處理多個
.py文件,實現(xiàn)批量生成 PDF,適合團隊協(xié)作或項目文檔歸檔。
總結(jié)
本文介紹了兩種將 Python 腳本轉(zhuǎn)換為 PDF 的方法:一種是按行插入文本,另一種是通過 HTML 生成語法高亮效果。前者簡單高效,適合快速歸檔;后者美觀專業(yè),適合文檔和演示場景。通過掌握 Spire.Doc 的 AppendText 和 AppendHTML 方法,以及 Pygments 的 HTML 轉(zhuǎn)換能力,可以輕松生成結(jié)構(gòu)清晰、可讀性強的 Python PDF 文檔。
無論是個人筆記整理、項目文檔歸檔,還是教學演示,這兩種方法都能滿足不同需求,提高代碼分享和管理的效率,同時保留排版美觀性。
以上就是使用Python將.py文件轉(zhuǎn)換為PDF并實現(xiàn)語法高亮的詳細內(nèi)容,更多關(guān)于Python.py文件轉(zhuǎn)PDF并高亮的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
解決tensorflow模型壓縮的問題_踩坑無數(shù),總算搞定
這篇文章主要介紹了解決tensorflow模型壓縮的問題_踩坑無數(shù),總算搞定!希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03
把vgg-face.mat權(quán)重遷移到pytorch模型示例
今天小編就為大家分享一篇把vgg-face.mat權(quán)重遷移到pytorch模型示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12
解析Anaconda創(chuàng)建python虛擬環(huán)境的問題
這篇文章主要介紹了Anaconda創(chuàng)建python虛擬環(huán)境,包括虛擬環(huán)境管理、虛擬環(huán)境中python包管理,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-03-03
Python自動化實現(xiàn)日報數(shù)據(jù)可視化
這篇文章主要為大家詳細介紹了如何使用Python實現(xiàn)自動化生成日報數(shù)據(jù)可視化,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2025-02-02
詳解Python中數(shù)據(jù)庫管理模塊shelve和dbm的應用
作為常用的 python 自帶數(shù)據(jù)庫管理模塊,shelve 和 dbm 都是非常方便的對象持久化存儲和檢索工具,本文將從用法、優(yōu)勢以及不同點等方面進行介紹,希望對大家有所幫助2023-10-10
python 中的divmod數(shù)字處理函數(shù)淺析
這篇文章主要介紹了python divmod數(shù)字處理函數(shù)的相關(guān)資料,感興趣的朋友一起看看吧2017-10-10

