如何使用 python 保留格式将代码写入 MS Word?
How to write code to MS Word using python retaining the formatting?
我想创建一个 MS word 文档来编译我现有的很多代码(在 MATLAB 和 Python 中)。我正在使用 python-docx.
编写它
如果我这样做:
file = open('task1.m', 'r')
document.add_paragraph(file)
然后代码以没有格式的简单文本格式用 MS word 编写。
有什么方法可以在保留编程语言格式的同时编写代码? (保持颜色不变)
.m 文件不包含颜色信息。这是由您使用的 IDE / 编辑器添加的。
如果您知道(或可以找到)如何将 html-formatted 或 rtf-formatted 文本插入到您的 Word 文档中,请查看 pygments 模块。
我不确定如何将此 rtf-formatted 文本写入 word 文档。但是,如果你把它写成一个RTF文档,这个可以用Word打开和保存。
假设我 运行 这个代码 toword.py
:
from docx import Document
from pygments import highlight
from pygments.lexers import PythonLexer
from pygments.formatters import RtfFormatter
with open("toword.py", "r") as f:
code = f.read()
ht = highlight(code, PythonLexer(), RtfFormatter())
with open("rtffile.rtf", "w") as wf:
wf.write(ht)
doc = Document()
paragraph = doc.add_paragraph(ht)
doc.save("code.docx")
还有一个 pygments.lexers.matlab.MatlabLexer
格式的 Matlab 文件。或者您可以使用 pygments.lexers.get_lexer_for_filename(filename)
从文件名中获取词法分析器。
正在 Word 中打开 rtffile.rtf
:
正在 Word 中打开 code.docx
:
或者,您可以使用 pandoc
module along with its backend。如果你提供一些markdown,它可以转换为docx格式,如果markdown包含代码围栏,它可以自动突出显示。
因此使用此代码:
# from docx import Document
from pygments import highlight
from pygments.lexers import PythonLexer
from pygments.formatters import HtmlFormatter
import pandoc
with open("toword.py", "r") as f:
code = f.read()
md = f"`````python\n{code}\n`````";
doc = pandoc.Document()
doc.markdown = bytearray(md, encoding="utf-8")
doc.add_argument("out=code.docx")
doc.docx
我们得到以下 code.docx
:
您可以使用 --highlight-style=...
参数来调整突出显示样式。更多信息 here
为了实现这一点,NotePad++ 提供了一个功能,可以为您的语言打开语法高亮显示。然后,select 代码,右键单击并 select“插件命令 > 使用语法突出显示复制文本”。
现在,您可以将其粘贴到 Word 中,并且颜色保持不变。
我想创建一个 MS word 文档来编译我现有的很多代码(在 MATLAB 和 Python 中)。我正在使用 python-docx.
编写它如果我这样做:
file = open('task1.m', 'r')
document.add_paragraph(file)
然后代码以没有格式的简单文本格式用 MS word 编写。
有什么方法可以在保留编程语言格式的同时编写代码? (保持颜色不变)
.m 文件不包含颜色信息。这是由您使用的 IDE / 编辑器添加的。
如果您知道(或可以找到)如何将 html-formatted 或 rtf-formatted 文本插入到您的 Word 文档中,请查看 pygments 模块。
我不确定如何将此 rtf-formatted 文本写入 word 文档。但是,如果你把它写成一个RTF文档,这个可以用Word打开和保存。
假设我 运行 这个代码 toword.py
:
from docx import Document
from pygments import highlight
from pygments.lexers import PythonLexer
from pygments.formatters import RtfFormatter
with open("toword.py", "r") as f:
code = f.read()
ht = highlight(code, PythonLexer(), RtfFormatter())
with open("rtffile.rtf", "w") as wf:
wf.write(ht)
doc = Document()
paragraph = doc.add_paragraph(ht)
doc.save("code.docx")
还有一个 pygments.lexers.matlab.MatlabLexer
格式的 Matlab 文件。或者您可以使用 pygments.lexers.get_lexer_for_filename(filename)
从文件名中获取词法分析器。
正在 Word 中打开 rtffile.rtf
:
正在 Word 中打开 code.docx
:
或者,您可以使用 pandoc
module along with its backend。如果你提供一些markdown,它可以转换为docx格式,如果markdown包含代码围栏,它可以自动突出显示。
因此使用此代码:
# from docx import Document
from pygments import highlight
from pygments.lexers import PythonLexer
from pygments.formatters import HtmlFormatter
import pandoc
with open("toword.py", "r") as f:
code = f.read()
md = f"`````python\n{code}\n`````";
doc = pandoc.Document()
doc.markdown = bytearray(md, encoding="utf-8")
doc.add_argument("out=code.docx")
doc.docx
我们得到以下 code.docx
:
您可以使用 --highlight-style=...
参数来调整突出显示样式。更多信息 here
为了实现这一点,NotePad++ 提供了一个功能,可以为您的语言打开语法高亮显示。然后,select 代码,右键单击并 select“插件命令 > 使用语法突出显示复制文本”。 现在,您可以将其粘贴到 Word 中,并且颜色保持不变。