我正在使用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中的结果。
答案 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')
结果如下: