如何用python中的Word docx等效替换latex bold命令?

时间:2015-11-28 16:17:20

标签: python regex python-2.7 python-docx

我正在使用python 2.7和python-docx-template将信息从文本文件移动到docx模板中。在放入模板之前,文本将转换为RichText。

某些文本行可能在文本的某处包含一个粗体的latex命令。我正在使用re.sub()删除乳胶命令,只留下粗体字。这意味着最终的docx文件中的单词不是粗体。理想情况下,我想使用docx命令替换latex命令,以使单词变为粗体。

例如,'这是一个句子,中间是\ textbf {粗字}。'

我尝试用python-docx-template的{​​{1}}替换胶乳,但是当整个段落转换为RichText时,它不会转换为RichText。我真的没想到这会起作用,但无论如何我都试过了。

我也尝试添加xml命令rt.add('bold words', bold=True),但这也不起作用。

我怀疑我必须将字符串分成块,然后rt.add()将它们组合在一起。如果是这样,我不知道该怎么做。字符串可能有多个乳胶粗体命令,但大多数字符串都没有任何乳胶命令。

如果需要块,我该怎么做呢?或者,有替代解决方案吗?

修改

我能够回答我自己的问题,但我很高兴知道更好或更有效的方法来完成这项任务。

<w:r><w:rPr><w:b/></w:rPr><w:t xml:space="preserve"> bold words </w:t></w:r>

以下是Word中的结果。

Final results

1 个答案:

答案 0 :(得分:0)

我想出了如何用re.split来解决我的问题。这仅在latex命令字符串的第一部分时才有效,对于我的情况应始终如此。但是,这不是最通用的解决方案。

from docxtpl import DocxTemplate, RichText
import re

tpl=DocxTemplate('test_tpl.docx')

startsentence = 'Here is a sentence with \textbf{bold words} in the middle of it and \textbf{the end of it.}'

latexbold = re.compile(r'\textbf\{([a-zA-Z0-9 .]+)\}')
x = re.split(latexbold, startsentence)
rt = RichText("")
l = len(x)

for i in range(0,l):
    if i%2 == 0:
        rt.add(x[i])
    else:
        rt.add(x[i], bold=True)

context = {
    'example': rt,
}

tpl.render(context)
tpl.save('test.docx')

结果如下:

End Result