pythonpython-docx

New lines/tabulators turn into spaces in generated document


I have problem with \n and \t tags. When I am opening a generated .docx in OpenOffice everything looks fine, but when I open the same document in Microsoft Word I just get the last two tabulators in section "Surname" and spaces instead of newlines/tabulators in other sections. What is wrong?

p = document.add_paragraph('Simple paragraph')
p.add_run('Name:\t\t' + name).bold = True
p.add_run('\n\nSurname:\t\t' + surname)

Solution

  • In Word, what we often think of as a line feed translates to a paragraph object. If you want empty paragraphs in your document you will need to insert them explicitly.

    First of all though, you should ask whether you're using paragraphs for formatting, a common casual practice for Word users but one you might want to deal with differently, in particular by using the space-before and/or space-after properties of a paragraph. In HTML this would correspond roughly to padding-top and padding-bottom.

    In this case, if you just want the line feeds, consider using paragraphs like so:

    document.add_paragraph('Simple paragraph')
    p = document.add_paragraph()
    p.add_run('Name:\t\t').bold = True
    p.add_run(name)
    document.add_paragraph()
    p = document.add_paragraph()
    p.add_run('Surname:\t\t').bold = True
    p.add_run(surname)