如何使用python-docx或任何其他类似的包来保存Word文档中的字体样式(粗体和斜体)

时间:2019-07-23 18:10:36

标签: python python-docx

我试图筛选Word文档并完成一些快速的语法检查。我目前有使用python-docx将文档拆分为单词的代码,然后根据特定条件对单词/句子进行语法检查。然后,我使用.add_run函数将正确的语法放回到文档中。 我遇到的问题是当我将正确的语法重新粘贴到文档中时,它没有保存字体样式(粗体和斜体),因此当我粘贴单词时,它只是显示为文本,而没有粗体和斜体当我想保留它时。 我的问题是,python中是否有任何方法(使用python-docx或任何其他软件包)保存每个单词的字体详细信息(主要是粗体和斜体),以便我可以相应地使用代码对单词进行粗体或斜体?

我已经尝试过将.style函数用于段落和运行,但是出现的问题是,每个段落的样式不清楚加粗和斜体的内容,并且我不想粘贴整个段落,只是错误的字眼。 我也尝试过为每次运行查看.style,但是它是不可靠的,因为运行通常会在不应该的情况下将一个单词分成2个。 (即使没有任何样式更改,“ Mario”也可能会变成两个不同的运行“ M”和“ ario”。)

我还尝试查看其他软件包,但没有发现任何帮助。

如果输入的内容是“ Stack Overflow是专业和发烧级程序员的问答网站。”(“ question”和“ answer”为粗体和斜体), 预期的输出是用“ question”和“ answer”粗体和斜体字表示的同一句子

实际输出是相同的句子,但其中没有任何粗体或斜体。

1 个答案:

答案 0 :(得分:0)

这在一般情况下是一个具有挑战性的问题:

  1. 字符格式可以应用到各个级别(直接,样式,文档默认值等),因此确定特定运行的有效字符格式并不是一个简单的过程。
  2. 一个给定的单词可以部分出现多次,并且不能保证单词的所有部分都是完整的单词,例如echo Html::button('multiple', ['class' => 'btn btn-info', 'id' => 'multi']); echo Html::button('single', ['class' => 'btn btn-info', 'id' => 'single']);

因此,您可以轻松完成工作。一般情况下的解决方案可能每个单词都有一个$js = <<<JS var element=$("#clubs"); $('#multi').on('click',function(e){ //reset select2 values if previously selected element.val(null).trigger('change'); //get plugin options let dataSelect = eval(element.data('krajee-select2')); //get kartik-select2 options let krajeeOptions = element.data('s2-options'); //add your options dataSelect.multiple=true; //apply select2 options and load select2 again $.when(element.select2(dataSelect)).done(initS2Loading("clubs", krajeeOptions)); }); $('#single').on('click',function(e){ element.val(null).trigger('change'); let dataSelect = eval(element.data('krajee-select2')); let krajeeOptions = element.data('s2-options'); dataSelect.multiple=false; $.when(element.select2(dataSelect)).done(initS2Loading("clubs", krajeeOptions)); }); JS; $this->registerJs($js, \yii\web\View::POS_READY); 对象,每个单词都有一个a sequence of five r|uns could ab|so|lut|ely be split like this"元组序列,通过适当的处理可以为您提供所需的信息。您可能会假设单词的第一个字符的格式可以安全地应用于整个单词。在这种情况下,您可能只有一系列Word对,其中(run, offset, length)项是其中出现(word, run)的第一个字符的项。

首先,我将研究runword以获得最常见的格式,然后从那里开始。