如何使Python-docx与复杂的脚本一起使用



我有一个工作的DOCX生成器,可用于欧洲语言,我正在尝试添加复杂的脚本支持。我找到了一些可以尝试的食谱的问题:python-docx add_style带有ctl(复杂文本布局)语言

我设法使其正常工作,因此复杂的字样文本以正确的字体和大小出现,但是我无法获得双向(左)文本的工作。显而易见的" X.Font.rtl = true"不起作用,另一个帖子中给出的咒语也不可用(" lang.set(qn('w:bidi'),'fa-ir')")。我必须从他的食谱中取出" rpr.get_or_add_sz(),这给我留下了一个不可读的文件,但是其他一切都没有它,我不认为它与此问题有关。

>

这是生成文档的样式出现的样式。xml文件:

<w:style w:styleId="Hebrew" w:type="paragraph" w:customStyle="1">
    <w:name w:val="Hebrew"/>
    <w:basedOn w:val="Normal"/>
    <w:pPr>
        <w:jc w:val="right"/>
    </w:pPr>
    <w:rPr>
        <w:rFonts w:cs="Arial"/>
        <w:rtl/>
        <w:szCs w:val="24"/>
        <w:lang w:bidi="he-IL"/>
    </w:rPr>
</w:style>

任何人都可以建议我如何以左至左的语言获得段落?

根据上面的评论,在咆哮的大力帮助下(谢谢!),我让一切正常。

咆哮的食谱在这里工作非常完美,除了调用rpr.get_or_add_sz()给了我一个不可读取的.docx文件。将其遗漏使一切正常,似乎并没有引起任何问题。关键的缺失链接是将以下内容添加到&lt; w:ppr&gt;以风格:

<w:bidi w:val="1">
<w:jc w:val="both"/>

有一个my_style.get_or_add_ppr()方法可以获取对&lt; w:ppr&gt;然后,该部分和代码类似于更新的代码

w_nsmap = '{'+ppr.nsmap['w']+'}'
bidi = None
jc = None
for element in ppr:
  if element.tag == w_nsmap + 'bidi':
    bidi = element
  if element.tag == w_nsmap + 'jc':
    jc = element
if bidi is None:
  bidi = OxmlElement('w:bidi')
if jc is None:
  jc = OxmlElement('w:jc')
bidi.set(qn('w:val'),'1')
jc.set(qn('w:val'),'both')
ppr.append(bidi)
ppr.append(jc)

我需要的最后一件事是处理混合语言文本,我通过将文本分解为多个运行来做到这一点。我正在处理的希伯来文字的帕拉斯(Paras of Hebrew)文本具有rtl = true的修改样式,但我将任何启动并以字母结尾的ASCII序列分开:

[A-Za-z][u0020-u007e]*[A-Aa-z]

用rtl = false进行单独运行。

最新更新