Сообщить об ошибке.

Свойства и методы объекта Run в python-docx

Объект прогона Run в основном используется для создания абзаца по частям с целью стилизации отдельных слов/символов в абзаце, а так же добавления картинок в документ MS Word.

Объект Run не создается вручную, а возвращается в результате вызова метода Paragraph.add_run().

Пример использования прогона Run:

from docx import Document
from docx.shared import Pt, RGBColor
from docx.enum.text import WD_UNDERLINE

# создание документа
doc = Document()
# задаем стиль текста по умолчанию
style = doc.styles['Normal']
style.font.name = 'Calibri'
style.font.size = Pt(14)
# добавляем абзац
p = doc.add_paragraph('Пользовательское ')
# добавляем в абзац текст прогоном с 
# целью стилизации отдельных слов 
run = p.add_run('форматирование ')
# Форматируем:
# размер шрифта
run.font.size = Pt(16)
# курсив 
run.font.italic = True
# добавляем еще текст прогоном
run = p.add_run('символов текста')
# Форматируем:
# название шрифта
run.font.name = 'Arial'
# размер шрифта
run.font.size = Pt(18)
# цвет текста
run.font.color.rgb = RGBColor(255, 0, 0)
# + жирный и подчеркнутый
run.font.bold = True
run.font.underline = WD_UNDERLINE.DOUBLE
# прогон без стиля
p.add_run(' в ')
# прогон с простым подчеркиванием, так можно 
# делать, если применяется только одно свойство 
p.add_run('абзаце').underline = True
# и последний прогон с точкой в конце
# предложения (ее не подчеркиваем)
run = p.add_run('.')
doc.save('test.docx')

Описание объекта Run.

Объект Run представляет собой прокси-объект, оборачивающий XML элемент документа MS Word. Прогоны в основном используются для пользовательского форматирования текста внутри абзаца, а так же добавления разрывов и картинок в документ MS Word.

Некоторые свойства объекта Run принимают значение с тремя состояниями:

  • True - соответствуют включению свойства;
  • False - соответствуют выключению свойства;
  • None - означает, что действующее значение свойства берется/наследуется из иерархии стилей документа.

Объект Run не создается вручную, а возвращается в результате вызова метода Paragraph.add_run().

Свойства объекта Run.


Run.add_break(break_type=6):

Метод Run.add_break() добавляет в этот прогон элемент разрыва, определенного типа break_type.

Аргумент break_type может принимать значения:

  • WD_BREAK.LINE - добавляет перенос строки.
  • WD_BREAK.PAGE - добавляет разрыв страницы.
  • WD_BREAK.COLUMN - добавляет разрыв колонки.

в котором WD_BREAK импортируется из docx.enum.text, тип разрыва по умолчанию равен WD_BREAK.LINE.

Пример:

from docx import Document
from docx.enum.text import WD_BREAK

doc = Document()
p = doc.add_paragraph()
# добавляем прогон с текстом и переносом на следующую строку 
p.add_run('Пользовательское форматирование').add_break(WD_BREAK.LINE)
p.add_run('символов текста в абзаце')
# перенос строки можно добавить с помощью символа новой строки `\n`
doc.add_paragraph('Перенос строки можно добавить\nс помощью символа новой строки')
doc.save('test.docx')

По большому счету, метод Document.add_page_break() эквивалентен функции page_break(), которая определена в коде ниже:

from docx import Document

def page_break():
    """Метод Document.add_page_break()"""
    from docx.enum.text import WD_BREAK
    doc.add_paragraph().add_run().add_break(WD_BREAK.PAGE)
    doc.add_paragraph()

doc = Document()
page_break()
doc.save('test.docx')

Run.add_picture(image_path_or_stream, width=None, height=None):

Метод Run.add_picture() добавляет в конец этого прогона изображение image_path_or_stream. метод возвращает экземпляр InlineShape, содержащий это изображение.

Аргумент image_path_or_stream может быть строкой c путем к файлу с изображением или файловым объектом, содержащим двоичное изображение.

Если не указана ни ширина width, ни высота height, то изображение отображается в исходном размере. Если указан только один размер, то он используется для вычисления коэффициента масштабирования, который затем применяется к отсутствующему размеру, сохраняя соотношение сторон.

Собственный размер изображения рассчитывается с использованием значения точек на дюйм dpi, указанного в файле изображения. Если значение dpi не указано, как это часто бывает, то оно принимается равным 72 dpi.

Пример:

from docx import Document
from docx.shared import Mm

doc = Document()

# добавляем пустой абзац
p = doc.add_paragraph()
# добавляем к абзацу прогон с картинкой
p.add_run().add_picture('/path/to/image.jpg', width=Mm(25))
# добавляем к абзацу прогон с текстом
p.add_run('Какой то текст какой то текст какой то текст')

# новая страница
doc.add_page_break()

# добавляем абзац с пустым прогоном
run = doc.add_paragraph().add_run()
# добавляем картинку в прогон
run.add_picture('/path/to/image.jpg', width=Mm(25))
# добавляем текст к прогону с картинкой
run.add_text('Какой то текст какой то текст какой то текст')
# смотрим, что получилось
doc.save('test.docx')

По большому счету, метод Document.add_picture() эквивалентен функции add_img(), которая определена в коде ниже:

from docx import Document
from docx.shared import Mm

def add_img(image_path, width=None, height=None):
    """Метод Document.add_picture()"""
    doc.add_paragraph().add_run().add_picture(image_path, width, height)

doc = Document()
add_img('/path/to/image.jpg', width=Mm(25))
doc.save('test.docx')

Run.add_tab():

Метод Run.add_tab() добавляет XML элемент <w:tab/> в конец прогона, который MS Word интерпретирует как символ табуляции.

Run.add_text(text):

Метод Run.add_text() добавляет в прогон текст text, который соответствующий новому дочернему XML-элементу <w:t>.

Обратите внимание на возможно более удобный подход к назначению текста объекту прогона, при помощи свойства Run.text.

Пример:

from docx import Document

doc = Document()
p = doc.add_paragraph('')
run = p.add_run('Добавляем')
run.bold = True
run.add_text(' текст к прогону.')
p.add_run(' Это новый прогон.')
doc.save('test.docx')

Run.bold:

Свойство Run.bold выделяет текст прогона полужирным шрифтом. Может принимать три состояния.

paragraph.add_run('Какой то текст').bold = True
# Эквивалентно
run = paragraph.add_run('Какой то текст')
run.bold = True
# или
run.font.bold = True

Run.clear():

Метод Run.clear() удаляет/очищает все содержимое прогона, при этом все форматирование прогона сохраняется.

Возвращает ссылку на содержимое, которое удалилось.

Run.font:

Свойство Run.font представляет собой объект Font, который предоставляет доступ к свойствам форматирования стов/символов для этого прогона, таким как имя шрифта, размер, цвет и т.д.

run = paragraph.add_run('Какой то текст')
# название шрифта
run.font.name = 'Arial'
# размер шрифта
run.font.size = Pt(18)
# цвет текста
run.font.color.rgb = RGBColor(0, 255, 0)

Run.italic:

Свойство Run.italic выделяет текста прогона курсивом. Может принимать три состояния.

paragraph.add_run('Какой то текст').italic = True
# Эквивалентно
run = paragraph.add_run('Какой то текст')
run.italic = True
# или
run.font.italic = True

Run.style:

Свойство Run.style представляет собой объект Style или имя встроенного в MS Word стиля символа, которое будет применено к этому прогону.

Если к прогону не применен какой либо стиль слов/символов, то возвращается стиль символов по умолчанию для документа (часто шрифт символа по умолчанию). Установка для этого свойства значения None удаляет любой стиль символов, применяемый напрямую.

Важно!!! Значением этого свойства может быть Имя стиля символа, которое встроено в интерфейс MS Word. Встроенные стили хранятся в файле WordprocessingML под своим английским именем и не зависят от локализации MS Word. Так как модуль python-docx работает с файлом WordprocessingML, то и поиск стиля должен использовать английское имя. Если файл WordprocessingML не найден (MS Word не установлен, например в OS Linux) то модуль python-docx работает со своей версией этого файла.

Пользовательские стили, которые ВЫ сами создали/настроили, не локализованы и доступны по имени, как они отображается в пользовательском интерфейсе MS Word.

Run.text:

Свойство Run.text представляет собой строку, сформированную путем объединения текстового эквивалента каждого дочернего элемента прогона в строку Python. Каждый дочерний XML-элемент <w:t> добавляет содержащиеся в нем текстовые символы. Дочерний элемент <w:tab/> добавляет символ \t. Каждый дочерний элемент <w:cr/> или <w:br> добавляет символ \n.

Обратите внимание, что элемент <w:br> может указывать на разрыв страницы или столбца, а также на разрыв строки. Все элементы <w:br> переводятся в один символ \n независимо от их типа. Все остальные дочерние элементы содержимого, такие как <w:drawing>, игнорируются.

Присвоение текста этому свойству имеет обратный эффект, переводя каждый символ \t в элемент <w:tab/>, а каждый символ \n или \r в элемент <w:cr/>. Все существующее содержимое прогона заменяется. Форматирование прогона сохраняется.

Run.underline:

Свойство Run.underline подчеркивает текст прогона определенным стилем. Может принимать значения: None, True, False или значение из WD_UNDERLINE.

  • None - указывает на то, что прогон наследует значение подчеркивания содержащего абзаца, при этом удаляет все напрямую применяемые значения подчеркивания.
  • False - указывает на настройку прогона без подчеркивания, переопределяющую любое унаследованное значение.
  • True - указывает одинарное подчеркивание.
  • WD_UNDERLINE используются для определения других стилей подчеркивания, таких как двойное, волнистое и пунктирное и т.д.

Смотрим пример:

import docx
from docx.enum.text import WD_UNDERLINE

doc = docx.Document()
p = doc.add_paragraph()
p.add_run('Подчеркивает только слова.\n').underline = WD_UNDERLINE.WORDS
p.add_run('Подчеркивает точками.\n').underline = WD_UNDERLINE.DOTTED
p.add_run('Подчеркивает двойной линией.\n').underline = WD_UNDERLINE.DOUBLE
p.add_run('Подчеркивает волнистой линией.').underline = WD_UNDERLINE.WAVY
doc.save('test.docx')