I am using python-docx 0.7.6.
I can't seem to be able to figure out how to set font family and size for a certain paragraph.
There is .style
property but style="Times New Roman"
doesn't work.
Can somebody please point me to an example?
Thanks.
Zenadix
14.1k3 gold badges25 silver badges41 bronze badges
asked Jan 11, 2015 at 6:49
This is how to set the Normal
style to font Arial
and size 10pt
.
from docx.shared import Pt
style = document.styles['Normal']
font = style.font
font.name = 'Arial'
font.size = Pt[10]
And this is how to apply it to a paragraph
.
paragraph.style = document.styles['Normal']
Using the current version of python-docx [0.8.5].
answered Jun 5, 2015 at 16:31
ZenadixZenadix
14.1k3 gold badges25 silver badges41 bronze badges
After reading through the API documentation I was able to figure out how to create my own style and apply it. You could create a paragraph style object the same way by changing this code to use WD_STYLE_TYPE.PARAGRAPH. Something that took me a minute to figure out was the objects and at what level they are applied so just make sure you understand that clearly. Something I found counter intuitive is that you define the styles properties after its creation.
This is how I created a character level style object.
document = Document[path to word document]
# Creates a character level style Object ["CommentsStyle"] then defines its parameters
obj_styles = document.styles
obj_charstyle = obj_styles.add_style['CommentsStyle', WD_STYLE_TYPE.CHARACTER]
obj_font = obj_charstyle.font
obj_font.size = Pt[10]
obj_font.name = 'Times New Roman'
This is how I applied the style to a run.
paragraph.add_run[any string variable, style = 'CommentsStyle'].bold = True
answered Apr 2, 2015 at 19:35
Alex NiesAlex Nies
1711 silver badge6 bronze badges
3
Support for run styles has been added in latest version of python-docx
answered Apr 3, 2015 at 3:49
MavWolverineMavWolverine
7901 gold badge8 silver badges22 bronze badges
Use this code it will help u a lot.
import docx
from docx.shared import Pt
from docx.enum.style import WD_STYLE_TYPE
doc = docx.Document[]
parag = doc.add_paragraph["Hello!"]
font_styles = doc.styles
font_charstyle = font_styles.add_style['CommentsStyle', WD_STYLE_TYPE.CHARACTER]
font_object = font_charstyle.font
font_object.size = Pt[20]
font_object.name = 'Times New Roman'
parag.add_run["this word document, was created using Times New Roman", style='CommentsStyle'].bold = True
parag.add_run["Python", style='CommentsStyle'].italic = True
doc.save["test.docx"]
StupidWolf
42.9k17 gold badges32 silver badges65 bronze badges
answered May 1, 2021 at 6:45
1
The documentation for python-docx is here: //python-docx.readthedocs.org/en/latest/
The styles that are available in the default template are listed here: //python-docx.readthedocs.org/en/latest/user/styles.html
In your example above you used a typeface name ["Times New Roman"] instead of a style id. If you use "Heading1" for example, that would change the look of the font, among other things, since it's a paragraph style.
At present there is no API for directly applying a typeface name or font size to text in python-docx, although that and more is coming in the next release, probably within a month. In the meantime, you can define styles for the paragraph and character settings you want and apply those styles. Using styles is the recommended way to apply formatting in Word, similar to how CSS is the recommended way to apply formatting to HTML.
answered Jan 11, 2015 at 8:00
scannyscanny
24.5k4 gold badges48 silver badges72 bronze badges
7