Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

text color in python-pptx module

I would like to color a sentence, in different color - say, the first half in red and rest in blue.

my code so far is like

from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.dml.color import ColorFormat, RGBColor
from pptx.enum.dml import MSO_COLOR_TYPE, MSO_THEME_COLOR
import codecs


prs = Presentation()
title_slide_layout = prs.slide_layouts[0]
slide = prs.slides.add_slide(title_slide_layout)


text_file = open("content.txt", "r")
# read the lyrics file
lines = text_file.readlines()

# page title
title = slide.shapes.title

# text frame in the page
tf = title.textframe

# paragrap in the text frame
p = tf.add_paragraph()
# write the first sentence 
#p.text = unicode(lines[0], encoding='utf-8')
p.text = "hello is red the rest is blue"
p.font.bold = True
p.font.color.rgb = RGBColor(255, 0, 0)

prs.save('test.pptx')
text_file.close()

in my code, the entire sentence is red; I would like to know how can I address different words to different color - again, say first half red the rest in blue.

like image 251
Areza Avatar asked Jul 14 '14 03:07

Areza


Video Answer


1 Answers

Add them as separate runs like so:

from pptx.dml.color import RGBColor
from pptx.enum.dml import MSO_THEME_COLOR
from pptx.util import Pt

p = tf.add_paragraph()
run = p.add_run()
run.text = 'hello'
font = run.font
font.name = 'Calibri'
font.size = Pt(18)
font.bold = True
font.color.theme_color = MSO_THEME_COLOR.ACCENT_1

run = p.add_run()
run.text = ' is red and the rest is blue'
run.font.color.rgb = RGBColor(0, 0, 255)

A run is a sequence of characters all sharing the same character formatting. To change character formatting within a paragraph, multiple runs must be used.

like image 94
scanny Avatar answered Oct 02 '22 06:10

scanny