I want to add a text box in powerpoint using apache poi hslf. In textbox, i want to add a heading and then the bullets in same textbox. But if i apply richtextrun.setbullet(true); it place bullet with heading as well although the heading is in separate rich text run. Any help would be appreciated. I am attaching the sample code.
import org.apache.poi.hslf.record.StyleTextPropAtom;
import org.apache.poi.hslf.record.TextCharsAtom;
import org.apache.poi.hslf.record.Record;
import org.apache.poi.hslf.model.*;
import org.apache.poi.hslf.model.textproperties.TextPropCollection;
import org.apache.poi.hslf.usermodel.SlideShow;
import org.apache.poi.hslf.usermodel.RichTextRun;
import java.awt.*;
import java.io.*;
public class test {
public static void main(String[] args) throws Exception {
SlideShow ppt = new SlideShow();
Slide slide = ppt.createSlide();
TextShape shape = new TextBox();
shape.setSheet(slide);
TextRun run = shape.getTextRun();
StyleTextPropAtom styleAtom = null;
TextCharsAtom textAtom = null;
for(Record r : run.getRecords()){
if(r instanceof StyleTextPropAtom) styleAtom = (StyleTextPropAtom)r;
else if(r instanceof TextCharsAtom) textAtom = (TextCharsAtom)r;
}
styleAtom.getParagraphStyles().clear();
styleAtom.getCharacterStyles().clear();
StringBuffer text = new StringBuffer();
TextPropCollection prProps, chProps;
RichTextRun rt;
String chunk;
//begin building rich text runs
//this should be heading and without bullet ppoint
chunk = " Apache POI";
text.append(chunk);
prProps = styleAtom.addParagraphTextPropCollection(chunk.length());
chProps = styleAtom.addCharacterTextPropCollection(chunk.length());
rt = new RichTextRun(shape.getTextRun(), text.length(), chunk.length(), null, chProps, false, false);
rt.supplySlideShow(ppt);
rt.setFontColor(Color.green);
rt.setItalic(true);
rt.setFontSize(24);
String chunk = " \r is \r cool";
int len = chunk.length();
text.append(chunk);
prProps = styleAtom.addParagraphTextPropCollection(chunk.length());
chProps = styleAtom.addCharacterTextPropCollection(chunk.length());
rt = new RichTextRun(shape.getTextRun(), text.length(), chunk.length(), prProps, chProps, false, false);
rt.supplySlideShow(ppt);
PPFont font = new PPFont();
font.setFontName("Times New Roman");
int fontIndex = ppt.addFont(font);
rt.setFontIndex(fontIndex);
rt.setBold(true);
rt.setFontSize(24);
rt.setBullet(true);
//sum of chunk lengths must be text.length+1, add a dummy char to the end
styleAtom.addParagraphTextPropCollection(1);
styleAtom.addCharacterTextPropCollection(1);
String txt = text.toString();
textAtom.setText(txt);
shape.getTextRun().buildRichTextRuns(styleAtom.getParagraphStyles(), styleAtom.getCharacterStyles(), txt);
//end building rich text runs
shape.setAnchor(new Rectangle(100, 100, 300, 50));
slide.addShape(shape);
FileOutputStream out = new FileOutputStream("test.ppt");
ppt.write(out);
out.close();
}
}
Thanks in Advance
I dont want bullet for first line