Python 和 PowerPoint 将“<br><br>”替换为“_x000D_”
Python and PowerPoint replace '<br><br>' becomes '_x000D_'
我正在使用 Python pptx 创建 PowerPoint,我的查询结果字符串包含 html '<br><br>
',我正在尝试将其替换为 '\n'喜欢:
TDsFirst = "\n" + self.TxtStringFromSQLserver.replace('<br><br>', '\n')
TDPs = TDPsFirst.replace('<br>', '\n')
TipDPsText_run.text = TDPs
这导致以“_x000D_
”结尾的行
我做错了什么?如何将“<br>
”转换为 returns?
这个行为有点新,但是是预期的行为:
https://python-pptx.readthedocs.io/en/latest/api/text.html#pptx.text.text._Run.text
A 运行 只能包含文本。 line-break 或段落边界发生在更高级别。特别是,line-break 只能出现在段落内的 运行 之间。一个段落 "break" 只能出现在一个 text-frame 段落之间。
因此,根据您要执行的操作,解决方案可能只是在 text-frame 级别进行分配,而不是 运行 级别,因为您的 variable-name TipDPsText_run
建议。 Line-feed 个字符 (\n
) 被 TextFrame.text
接受并变成段落边界。
这可能不会完全解决问题,但它可能(我给它 90% 的可能性)并且至少会将问题更改为可以解决的问题。
更新: 进一步检查代码后,实际上换行符本身 "\x0A"
被 Run.text
接受并原封不动地放入 XML 它可能看起来很像 line-break。这种遗留礼貌不会扩展到 carriage-return "\x0D"
,它的呈现方式与您看到的 "_x000D_"
一样。这个额外的 CR 字节在那里,因为你在 Windows 上 运行ning。因此,您可以通过在文本分配中使用 "\x0A"
而不是 "\n"
来解决这个问题。但我推荐 text-frame 级别分配,因为这种方法更符合 PowerPoint 行为,其中键入 carriage-return 会创建一个新段落。
PowerPoint 仅将 0x0a
处理为换行符。当您使用“Python pptx”在单个占位符中创建额外的行时,如果源文本包含 0x0d
代码,则输出页面会在末尾显示一个奇怪的单词 _x000D_
的线。所以我做了一个简单的过滤器来解决这个问题。
此简单代码将 \r\n
替换为单个 \n
。
def office_comp(usr_txt):
u_items = usr_txt.splitlines()
return '\n'.join(u_items)
然后使用 Python pptx 如:
new_slide.placeholders[p].text = office_comp(your_text_asis)
我正在使用 Python pptx 创建 PowerPoint,我的查询结果字符串包含 html '<br><br>
',我正在尝试将其替换为 '\n'喜欢:
TDsFirst = "\n" + self.TxtStringFromSQLserver.replace('<br><br>', '\n')
TDPs = TDPsFirst.replace('<br>', '\n')
TipDPsText_run.text = TDPs
这导致以“_x000D_
”结尾的行
我做错了什么?如何将“<br>
”转换为 returns?
这个行为有点新,但是是预期的行为:
https://python-pptx.readthedocs.io/en/latest/api/text.html#pptx.text.text._Run.text
A 运行 只能包含文本。 line-break 或段落边界发生在更高级别。特别是,line-break 只能出现在段落内的 运行 之间。一个段落 "break" 只能出现在一个 text-frame 段落之间。
因此,根据您要执行的操作,解决方案可能只是在 text-frame 级别进行分配,而不是 运行 级别,因为您的 variable-name TipDPsText_run
建议。 Line-feed 个字符 (\n
) 被 TextFrame.text
接受并变成段落边界。
这可能不会完全解决问题,但它可能(我给它 90% 的可能性)并且至少会将问题更改为可以解决的问题。
更新: 进一步检查代码后,实际上换行符本身 "\x0A"
被 Run.text
接受并原封不动地放入 XML 它可能看起来很像 line-break。这种遗留礼貌不会扩展到 carriage-return "\x0D"
,它的呈现方式与您看到的 "_x000D_"
一样。这个额外的 CR 字节在那里,因为你在 Windows 上 运行ning。因此,您可以通过在文本分配中使用 "\x0A"
而不是 "\n"
来解决这个问题。但我推荐 text-frame 级别分配,因为这种方法更符合 PowerPoint 行为,其中键入 carriage-return 会创建一个新段落。
PowerPoint 仅将 0x0a
处理为换行符。当您使用“Python pptx”在单个占位符中创建额外的行时,如果源文本包含 0x0d
代码,则输出页面会在末尾显示一个奇怪的单词 _x000D_
的线。所以我做了一个简单的过滤器来解决这个问题。
此简单代码将 \r\n
替换为单个 \n
。
def office_comp(usr_txt):
u_items = usr_txt.splitlines()
return '\n'.join(u_items)
然后使用 Python pptx 如:
new_slide.placeholders[p].text = office_comp(your_text_asis)