1

I currently have a paragraph as a header that is Pt48 in size and I want to create a new line break using add_break() which works perfectly fine but it inherits the top paragraph character size. Is there a way to specify the new line break character size. I've look at the documentation and I cannot find anything that can do this. Line Break Reference | Working with Text Refrence

Some code for reference

document = Document()

initiate_all_styles(document)

invoice_header = document.add_paragraph(style='invoice')
invoice_header_run = invoice_header.add_run('INVOICE')
invoice_header_run.bold = True
invoice_header_run.add_break()

document.save('invoice.docx')

Styles code

def initiate_all_styles(document):
  initiate_invoice_style(document)
  #other methods for styles located here

def initiate_invoice_style(document):
  font_styles = document.styles
  font_charstyle = font_styles.add_style('invoice', WD_STYLE_TYPE.PARAGRAPH)
  font_charstyle.font.color.rgb = RGBColor.from_string(MAIN_COLOR)
  font_object = font_charstyle.font
  font_object.size = Pt(48)
  font_object.name = 'Arial'

Edit:
My current solution for this is to create an invisible paragraph with a character that matched the background colour and set the size to my desired spacing Pt(10).

This is definitely not a great solution and more of a hack but it works. This also takes a extra couple lines of code rather then potentially adding 1 and maintaining it also pain in the butt.

invisible_character = document.add_paragraph('-', style='invisible')
invisible_character.paragraph_format.line_spacing = ONE_DOT_ZERO_LINE_SPACING
invisible_character.paragraph_format.space_after = ZERO_SPACE_AFTER

1 Answer 1

2

Seems you don't really understood the concept of paragraphs and text-runs in Word.

Paragraphs always are followed by a line break. No need to set one. The space between paragraphs is determined by space after set for this paragraph and space before set for next paragraph.

Paragraphs contain text-runs. Each tex-run may have different font-formatting. But there cannot be different font-formatting in one single text-run, even not after a line break.

A line break in a text-run get used when the text-line shall break but without creating a new paragraph. This is a very rare use case because Word automatically breaks lines when text reaches the right page margin.

Following code produces what I think you want to achieve:

from docx import Document
from docx.shared import RGBColor, Pt
from docx.enum.style import WD_STYLE_TYPE

MAIN_COLOR = '0000FF'

def initiate_all_styles(document):
  invoice_paragraph_style = document.styles.add_style('invoice', WD_STYLE_TYPE.PARAGRAPH)
  invoice_paragraph_style.font.color.rgb = RGBColor.from_string(MAIN_COLOR)
  invoice_paragraph_style.font.size = Pt(48)
  invoice_paragraph_style.font.name = 'Arial'
  invoice_paragraph_style.paragraph_format.line_spacing = 1.0
  invoice_paragraph_style.paragraph_format.space_before = Pt(0)
  invoice_paragraph_style.paragraph_format.space_after = Pt(0)
  
  default_paragraph_style = document.styles.add_style('default', WD_STYLE_TYPE.PARAGRAPH)
  #default_paragraph_style.font.color.rgb = RGBColor.from_string(MAIN_COLOR) # default color is black
  default_paragraph_style.font.size = Pt(10)
  default_paragraph_style.font.name = 'Arial'
  default_paragraph_style.paragraph_format.line_spacing = 1.0
  default_paragraph_style.paragraph_format.space_before = Pt(0) 
  default_paragraph_style.paragraph_format.space_after = Pt(0) 
  
    
document = Document()

initiate_all_styles(document)

invoice_header = document.add_paragraph(style='invoice')
invoice_header_run = invoice_header.add_run('INVOICE')
invoice_header_run.bold = True
#invoice_header_run.add_break() # why?
invoice_first_paragraph = document.add_paragraph(style='default')
invoice_first_paragraph_run = invoice_first_paragraph.add_run('Lorem ipsum...')
invoice_first_paragraph_run.add_break()
invoice_first_paragraph_run = invoice_first_paragraph.add_run('semit dolor...')

document.save('invoice.docx')
Sign up to request clarification or add additional context in comments.

1 Comment

Thank you for clarifying how paragraphs work in word and a nice demostration.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.