python-docx - 在 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 元素中。
解决方案
再过几个小时,我想我看到了完整的画面。首先,正如 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 翻译器”。
推荐阅读
- angular - 如何更改传单路由机标记的默认颜色
- java - org.apache.spark.SparkException:任务不可序列化,除实现 java.io.Serializable 之外的任何其他解决方案
- machine-learning - scikit learn中的分类报告
- ios - 从用 Swift 编写的 App 连接远程 Dgraph 数据库
- php - 超过 1 个 PHP 脚本请求不能在本地主机上同时工作
- delphi-2010 - DbLookUpComboBox 下拉菜单
- python - Pandas 用其特定阈值计算每一列
- python - 阐明 Tkinter 自动完成条目的功能
- pyenv - Pyenv 无法切换 Python 版本
- react-native - 反应双重执行