OritK
OritK

Reputation: 544

Can't set font size and rtl

Using docx, I am trying to define for a run multiple attributes. When I set color, rtl, it works fine. But when I add also font size, it is ignored. If I set only font size, it works fine.

This works fine (font color changes and run is right-to-left):

run = p.add_run(line)
font = run.font
font.rtl = True
font.color.rgb = RGBColor(0x42, 0x24, 0xE9)

This also works fine (font size is modified):

run = p.add_run(line)
font = run.font
font.size = Pt(8)
#font.rtl = True # commented out

But this does not change the font's size:

run = p.add_run(line)
font = run.font
font.size = Pt(8)
font.rtl = True

I tried different order of the commands, but nothing works.

Upvotes: 8

Views: 772

Answers (2)

OritK
OritK

Reputation: 544

ok, found it! It turns out that in word, the font size for such a case has to include complex script instructions. It means that you have to add

<w:szCs w:val="???"/> 

instead (or in addition to) the normal

<w:sz w:val="??"/> 

I had to add a new attribute to the font in the docx library and it now works fine. The change is in 3 docs files:

text/font.py
oxml/__init.py__
oxml/text/font.py

and the usage in my view:

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

Added a fork to docx library. In https://github.com/Oritk/python-docx

Upvotes: 4

omair issa
omair issa

Reputation: 1

accepted I haven't gotten around to playing with docx yet (I've mostly used Excel python modules), but based on the documentation here it's looking like you're modifying the wrong property of style. The Font property, per this definition of the rtl property, would only modify an added run (via myparagraph.add_run("Hello World", style = "rtl")).As far as I can tell, the code you're looking for is:

missingwords = Document()
style = missingwords.styles.add_style('rtl', WD_STYLE_TYPE.PARAGRAPH)
style.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT

And then you can go ahead and add the paragraph like you were

paragraph = missingwords.add_paragraph("Hello world",style='rtl')

Again, just going off the documentation, so let me know if that works

Upvotes: 0

Related Questions