首页 > 解决方案 > 在 run.text 中看不到特殊字体字符(有时)

问题描述

我有一个将一些 Wingdings 字符与 Cambria 文本混合在一起的 word 文档。当我查看运行时,有时会看到长度为 1 的 run.text,并且字符是十六进制的,例如 0xf063。run.font.name 是例如 Wingdings 2。这符合预期。但我经常看到一个空的 run.text(字体名称仍然是 Wingdings)。尽管如此,字符必须在那里,因为当我将运行附加到新段落时,我可以在 Word 中看到它们,至少当我通过它们时。然而,当我复制跑步时(尽我所能),角色丢失了,可能是因为当我重复跑步时,我错过了一些东西。所以我的问题是,当 run.text 为空时,字符存储在哪里,当我复制这样的运行时,我必须观察什么。但是,如果 run.text 不为空,则在运行复制期间字符不会丢失。因此,问题出在阅读文档时,有时字符在 run.text 中,有时在其他地方。哪一个对我来说是不可预测的。

我只是想解压缩文档并查看 document.xml。我看到了

<w:r w:rsidRPr="00946796"> 
  <w:rPr> <w:color w:val="EE9512"/> 
    <w:lang w:val="de-DE"/> 
  </w:rPr> 
  <w:t xml:space="preserve">YYYYYYY 
  </w:t> 
</w:r> 
<w:r w:rsidR="009E034B" w:rsidRPr="00695B07"> 
  <w:rPr> 
    <w:rFonts w:ascii="Wingdings 3" w:hAnsi="Wingdings 3"/> 
    <w:color w:val="EE9512"/> 
  </w:rPr> 
  <w:sym w:font="Wingdings 2" w:char="F038"/> 
</w:r> 

因此,当 run.text 为空时,字符在 aw:sym 元素中,否则在 aw:t 元素中。

标签: python-docx

解决方案


再过几个小时,我想我看到了完整的画面。首先,正如 scanny 上面写的,python-docx 根本不处理 w:sym 元素(还没有?),所以这些在阅读 docx 后会丢失,除非你求助于 lxml。那么,为什么我有时会在 w:t 中看到 Wingdings 字符,有时在 w:sym 中看到?好吧,如果我使用单词符号选择器(一个包含所有字体的字符的窗口,您可以在其中选择一个然后按底部的“插入”),那么您将获得 aw:sym 元素。如果您只是将字体设置为 Wingdings,然后在键盘上键入合适的字符(例如,8 表示 Wingdings 2 Circle with Dot inside),那么您将获得 aw:t 元素。因此,我设法删除了所有 w:sym 元素。要确定“合适”的字符,请在 Google 上搜索“Wingdings 翻译器”。


推荐阅读