python-docx add_style与CTL(复杂文本布局)语言

时间:2017-08-11 05:34:59

标签: python python-docx

我想要完成的任务:

  • 使用用户定义的波斯语字体和大小(CTL语言)在python-docx中创建段落样式

问题:

  • 我可以使用非CTL语言,例如英语:

    from docx import Document
    from docx.enum.style import WD_STYLE_TYPE
    from docx.shared import Pt
    
    user_font_name = 'FreeMono'
    user_font_size = 14
    
    doc = Document()
    my_style = doc.styles.add_style('style_name',WD_STYLE_TYPE.PARAGRAPH)
    my_font = my_style.font
    my_font.name = user_font_name
    my_font.size = Pt(user_font_size)
    p = doc.add_paragraph('some text',my_style)
    
    # persian_p = doc.add_paragraph('نوشته',my_style)
    # FreeMono supports Persian language so the problem is not the font
    
    doc.save('file.docx')
    
  • 但是,如果我将文本更改为波斯文本,其字体将不会更改为指定的字体。

为什么会发生这种情况:

  • 我指定的字体仅更改西方字体系列样式,并且不对CTL字体系列做任何事情

我怎么知道:

  • 如果我用LibreOffice打开docx文件并打开样式并进入字体部分,我可以看到我指定的字体和大小在“Western Text Font Family”中,但不在“CTL Font Family”中。结果我的CTL文本字体成为默认字体。

其他信息:

  1. 我在Linux上使用LibreOffice
  2. 在这种情况下,更改默认样式对我没有任何帮助,因为我希望用户指定字体名称和大小。
  3. 我没有更改xml文件的经验(更不用说docx xml文件)
  4. python-docx版本是0.8.6

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,并将支持添加到docx库中。 分叉的docx代码位于https://github.com/Oritk/python-docx中 用法:

run = p.add_run(line)
#ru.font.size = Pt(8) ### This line is redundant - but you can leave it
run.font.cs_size = Pt(8)
run.font.rtl = True