如何获得蟒蛇,DOCX复杂脚本的工作?(How to get python-docx working

2019-09-26 04:52发布

我有一个工作的docx发生器欧洲语言的正常工作,而且我尝试添加复杂的脚本支持。 我发现了一些食谱另一个问题尝试: 蟒蛇,DOCX add_style与CTL(复杂文本布局)语言

我设法得到它的工作,使复杂的脚本文本在正确的字体和大小出来,但我不能得到双向(从右到左)的文字工作。 明显的 “x.font.rtl =真” 是不行的,而且也没有在其他职位给出的咒语( “lang.set(QN( 'W:比迪烟'), 'FA-IR')”)。 我不得不采取从他的食谱,这给我留下了一个无法读取文件中的行“‘rpr.get_or_add_sz()’,但一切工作没有它,我不认为它是与此相关的问题。

这里是风格,因为它出现在生成的文档的styles.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>

谁能告诉我该怎么做来获得从右到左书写的语言工作段落?

Answer 1:

按照上述意见,并与来自轰鸣声很大帮助(感谢,怒吼!)我得到的一切工作。

轰鸣的配方在这里完美地工作,除了调用rpr.get_or_add_sz()给了我一个不可读的.docx文件。 离开它做的一切工作,似乎没有引起任何问题。 关键缺失环节是添加以下为<w:PPR>的风格:

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

有一个my_style.get_or_add_pPr()方法来获得在<w:PPR>基准的样式的部分,并且所述代码然后被相似的代码用于更新<W:RPR>:

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)

我需要的最后一件事是处理混合语言文本,我做到了,打破了文成多个运行。 我正在处理被给予与RTL =真正的改装风格希伯来文的第,但我打出了其启动并以字母结束任何ASCII序列:

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

与RTL单独的运行=假。



文章来源: How to get python-docx working with complex scripts?