For AI agents: the complete documentation index is available at /pptxgenjs-plus/llms.txt, the full documentation bundle is available at /pptxgenjs-plus/llms-full.txt, and this page is available as Markdown at /pptxgenjs-plus/api-text.md.

Text

Text shapes can be added to Slides.

Usage

slide.addText([{ text: "TEXT", options: { OPTIONS } }]);

Properties

Position/Size Props (PositionProps)

NameTypeDefaultDescriptionPossible Values
xnumber1.0hor location (inches)0-n
xstringhor location (percent)'n%'. (Ex: {x:'50%'} middle of the Slide)
ynumber1.0ver location (inches)0-n
ystringver location (percent)'n%'. (Ex: {y:'50%'} middle of the Slide)
wnumber1.0width (inches)0-n
wstringwidth (percent)'n%'. (Ex: {w:'50%'} 50% the Slide width)
hnumber1.0height (inches)0-n
hstringheight (percent)'n%'. (Ex: {h:'50%'} 50% the Slide height)

Base Properties (TextPropsOptions)

OptionTypeUnitDefaultDescriptionPossible Values
alignstringleftalignmentleft or center or right
autoFitbooleanfalse"Fit to Shape"true or false
baselinenumberpointstext baseline value0-256
boldbooleanfalsebold texttrue or false
breakLinebooleanfalseappends a line breaktrue or false (only applies when used in text options) Ex: {text:'hi', options:{breakLine:true}}
bulletbooleanfalsebulleted texttrue or false
bulletobjectbullet optionsobject with type, code or style. Ex: bullet:{type:'number'}. Ex: bullet:{code:'2605'}. Ex: {style:'alphaLcPeriod'}
charSpacingnumberpointscharacter spacing1-256. Ex: { charSpacing:12 }
colorstringtext colorhex color code or scheme color. Ex: { color:'0088CC' }
fillstringfill/bkgd colorhex color code or scheme color. Ex: { color:'0088CC' }
fitstringnonetext fit optionsnone, shrink, resize. Ex: { fit:'shrink' }
fontFacestringfont faceEx: { fontFace:'Arial'}
fontSizenumberpointsfont size1-256. Ex: { fontSize:12 }
glowobjecttext glowobject with size, opacity, color (opt). Ex: glow:{size:10, opacity:0.75, color:'0088CC'}
highlightstringhighlight colorhex color code or scheme color. Ex: { color:'0088CC' }
hyperlinkstringadd hyperlinkobject with url or slide (tooltip optional). Ex: { hyperlink:{url:'https://github.com'} }
indentLevelnumberlevel0bullet indent level1-32. Ex: { indentLevel:1 }
insetnumberinchesinset/padding1-256. Ex: { inset:1.25 }
isTextBoxbooleanfalsePPT "Textbox"true or false
italicbooleanfalseitalic texttrue or false
langstringen-USlanguage settingEx: { lang:'zh-TW' } (Set this when using non-English fonts like Chinese)
lineobjectline/borderadds a border. Ex: line:{ width:'2', color:'A9A9A9' }
lineSpacingnumberpointsline spacing points1-256. Ex: { lineSpacing:28 }
lineSpacingMultiplenumberpercentline spacing multiple0.0-9.99
marginnumberpointsmargin0-99 (ProTip: use the same value from CSS padding)
outlineobjecttext outline optionsOptions: color & size. Ex: outline:{ size:1.5, color:'FF0000' }
paraSpaceAfternumberpointsparagraph spacingParagraph Spacing: After. Ex: { paraSpaceAfter:12 }
paraSpaceBeforenumberpointsparagraph spacingParagraph Spacing: Before. Ex: { paraSpaceBefore:12 }
rectRadiusnumberinchesrounding radiusrounding radius for ROUNDED_RECTANGLE text shapes
rotateintegerdegrees0text rotation degrees0-360. Ex: {rotate:180}
rtlModebooleanfalseenable Right-to-Left modetrue or false
shadowobjecttext shadow optionssee "Shadow Properties" below. Ex: shadow:{ type:'outer' }
softBreakBeforebooleanfalsesoft (shift-enter) breakAdd a soft line-break (shift+enter) before line text content
strikestringtext strikethroughdblStrike or sngStrike
subscriptbooleanfalsesubscript texttrue or false
superscriptbooleanfalsesuperscript texttrue or false
transparencynumber0transparencyPercentage: 0-100
underlineTextUnderlinePropsunderline color/styleTextUnderlineProps
valignstringvertical alignmenttop or middle or bottom
vertstringhorztext directioneaVert or horz or mongolianVert or vert or vert270 or wordArtVert or wordArtVertRtl
wrapbooleantruetext wrappingtrue or false
vertOverflowstringvertical overflowoverflow, ellipsis, or clip. Ex: { vertOverflow:'clip' }
horzOverflowstringhorizontal overflowoverflow or clip. Ex: { horzOverflow:'clip' }

Shadow Properties (ShadowProps)

OptionTypeUnitDefaultDescriptionPossible Values
typestringoutershadow typeouter or inner
anglenumberdegreesshadow angle0-359. Ex: { angle:180 }
blurnumberpointsblur size1-256. Ex: { blur:3 }
colorstringtext colorhex color code or scheme color constant. Ex: { color:'0088CC' }
offsetnumberpointsoffset size1-256. Ex: { offset:8 }
opacitynumberpercentopacity0-1. Ex: opacity:0.75

Examples

Text Options

var pptx = new PptxGenJS();
var slide = pptx.addSlide();

// EX: Dynamic location using percentages
slide.addText("^ (50%/50%)", { x: "50%", y: "50%" });

// EX: Basic formatting
slide.addText("Hello", { x: 0.5, y: 0.7, w: 3, color: "0000FF", fontSize: 64 });
slide.addText("World!", { x: 2.7, y: 1.0, w: 5, color: "DDDD00", fontSize: 90 });

// EX: More formatting options
slide.addText("Arial, 32pt, green, bold, underline, 0 inset", {
    x: 0.5,
    y: 5.0,
    w: "90%",
    margin: 0.5,
    fontFace: "Arial",
    fontSize: 32,
    color: "00CC00",
    bold: true,
    underline: true,
    isTextBox: true,
});

// EX: Format some text
slide.addText("Hello World!", { x: 2, y: 4, fontFace: "Arial", fontSize: 42, color: "00CC00", bold: true, italic: true, underline: true });

// EX: Multiline Text / Line Breaks - use "\n" to create line breaks inside text strings
slide.addText("Line 1\nLine 2\nLine 3", { x: 2, y: 3, color: "DDDD00", fontSize: 90 });

// EX: Format individual words or lines by passing an array of text objects with `text` and `options`
slide.addText(
    [
        { text: "word-level", options: { fontSize: 36, color: "99ABCC", align: "right", breakLine: true } },
        { text: "formatting", options: { fontSize: 48, color: "FFFF00", align: "center" } },
    ],
    { x: 0.5, y: 4.1, w: 8.5, h: 2.0, fill: { color: "F1F1F1" } }
);

// EX: Bullets
slide.addText("Regular, black circle bullet", { x: 8.0, y: 1.4, w: "30%", h: 0.5, bullet: true });
// Use line-break character to bullet multiple lines
slide.addText("Line 1\nLine 2\nLine 3", { x: 8.0, y: 2.4, w: "30%", h: 1, fill: { color: "F2F2F2" }, bullet: { type: "number" } });
// Bullets can also be applied on a per-line level
slide.addText(
    [
        { text: "I have a star bullet", options: { bullet: { code: "2605" }, color: "CC0000" } },
        { text: "I have a triangle bullet", options: { bullet: { code: "25BA" }, color: "00CD00" } },
        { text: "no bullets on this line", options: { fontSize: 12 } },
        { text: "I have a normal bullet", options: { bullet: true, color: "0000AB" } },
    ],
    { x: 8.0, y: 5.0, w: "30%", h: 1.4, color: "ABABAB", margin: 1 }
);

// EX: Paragraph Spacing
slide.addText("Paragraph spacing - before:12pt / after:24pt", {
    x: 1.5,
    y: 1.5,
    w: 6,
    h: 2,
    fill: { color: "F1F1F1" },
    paraSpaceBefore: 12,
    paraSpaceAfter: 24,
});

// EX: Hyperlink: Web
slide.addText(
    [
        {
            text: "pptxgenjs Project",
            options: { hyperlink: { url: "https://github.com/lofcz/pptxgenjs-plus", tooltip: "Visit Homepage" } },
        },
    ],
    { x: 1.0, y: 1.0, w: 5, h: 1 }
);
// EX: Hyperlink: Slide in Presentation
slide.addText(
    [
        {
            text: "Slide #2",
            options: { hyperlink: { slide: 2, tooltip: "Go to Summary Slide" } },
        },
    ],
    { x: 1.0, y: 2.5, w: 5, h: 1 }
);

// EX: Drop/Outer Shadow
slide.addText("Outer Shadow", {
    x: 0.5,
    y: 6.0,
    fontSize: 36,
    color: "0088CC",
    shadow: { type: "outer", color: "696969", blur: 3, offset: 10, angle: 45 },
});

// EX: Text Outline
slide.addText("Text Outline", {
    x: 0.5,
    y: 6.0,
    fontSize: 36,
    color: "0088CC",
    outline: { size: 1.5, color: "696969" },
});

// EX: Formatting can be applied at the word/line level
// Provide an array of text objects with the formatting options for that `text` string value
// Line-breaks work as well
slide.addText(
    [
        { text: "word-level\nformatting", options: { fontSize: 36, fontFace: "Courier New", color: "99ABCC", align: "right", breakLine: true } },
        { text: "...in the same textbox", options: { fontSize: 48, fontFace: "Arial", color: "FFFF00", align: "center" } },
    ],
    { x: 0.5, y: 4.1, w: 8.5, h: 2.0, margin: 0.1, fill: { color: "232323" } }
);

pptx.writeFile("Demo-Text");

Line Break Options

  • Use the breakLine prop to force line breaks when composing text objects using an array of text objects.
  • Use the softBreakBefore prop to create a "soft line break" (shift-enter)
let arrTextObjs1 = [
    { text: "1st line", options: { fontSize: 24, color: "99ABCC", breakLine: true } },
    { text: "2nd line", options: { fontSize: 36, color: "FFFF00", breakLine: true } },
    { text: "3rd line", options: { fontSize: 48, color: "0088CC" } },
];
slide.addText(arrTextObjs1, { x: 0.5, y: 1, w: 8, h: 2, fill: { color: "232323" } });

let arrTextObjs2 = [
    { text: "1st line", options: { fontSize: 24, color: "99ABCC", breakLine: false } },
    { text: "2nd line", options: { fontSize: 36, color: "FFFF00", breakLine: false } },
    { text: "3rd line", options: { fontSize: 48, color: "0088CC" } },
];
slide.addText(arrTextObjs2, { x: 0.5, y: 4, w: 8, h: 2, fill: { color: "232323" } });

Line Break Examples

text line breaks

Text Formatting

text formatting

Bullet Options

bullets options

Tab Stops

tab stops

Fields

A field is a run PowerPoint refreshes on open — a date, the slide number, a header or footer. The run's text is the cached value, shown by consumers that do not refresh.

slide.addText([
    { text: '22/08/2026', options: { field: 'datetime1' } },
    { text: ' — page ' },
    { text: '1', options: { field: 'slidenum' } },
], { x: 1, y: 1, w: 4, h: 0.5 });

Types: slidenum, datetime, datetime1–datetime13 (locale-formatted variants), datetimeFigureOut, headerfooter, hdr, ftr. Fields mix freely with ordinary runs in a paragraph. An unknown type is emitted as plain text with a warning. Slide-number placeholders (slideNumber on a master) are unchanged.

Bullet Colour, Size, Font, and Pictures

slide.addText('item', { x: 1, y: 1, w: 4, h: 1, bullet: { image: pngBase64, size: 150 } });
slide.addText('item', { x: 1, y: 2, w: 4, h: 1, bullet: { characterCode: '25BA', fontFace: 'Wingdings', color: 'FF0000' } });
OptionTypeDefaultDescription
colorColorbullet colour, independent of the text (a:buClr)
sizenumber100percent of text size, 25–400 (a:buSzPct)
sizePtsnumbersize in points instead of a percent (a:buSzPts)
fontFacestringtypeface for the glyph (a:buFont)
imagestringbase64 picture bullet (a:buBlip)

A picture bullet replaces a character or number bullet. sizePts and size are the same choice in the schema, so sizePts wins when both are given. Numbered bullets keep their +mj-lt fallback unless fontFace is set. Existing keys (characterCode, numberType, numberStartAt) are unchanged.

Right-to-Left Columns and East Asian Text

rtlColumns controls a:bodyPr@rtlCol, which decides whether multi-column text flows right-to-left. It follows the text box's rtlMode unless set explicitly. Table rtlMode (a:tblPr@rtl) is unchanged. kumimoji enables horizontal-in-vertical numerals for East Asian vertical text.

Mouse-Over Actions

hyperlinkHover takes the same props as hyperlink but fires on mouse-over — PowerPoint's Insert > Action > Mouse Over tab. It works on text runs, shapes, and images.

slide.addShape(pptx.ShapeType.rect, {
    x: 1, y: 1, w: 3, h: 1,
    hyperlink: { url: 'https://example.com', tooltip: 'Open the site' },
    hyperlinkHover: { slide: 4, tooltip: 'Preview the results slide' },
});
OptionTypeDefaultDescription
urlstringexternal target (url or slide is required)
slidenumberslide number to jump to
tooltipstringtooltip text
highlightClickbooleanfalsehighlight the link when clicked
stopSoundsOnClickbooleanfalsestop playing sounds when clicked
soundHyperlinkSoundPropssound played when the action fires

Action Sounds

OptionTypeDefaultDescription
datastringWAV data, base64 with a mime header (data/path)
pathstringWAV file path or URL
namestringsound.wavname PowerPoint shows in the Action dialog

a:snd accepts WAV only (ECMA-376 §20.1.2.2.32); other formats are rejected with a warning rather than linked. A hover link with neither url nor slide is dropped with a warning.