It might be a bug. Can you create a bug in Bugzilla and attach to it
a ppt template and sample code to reproduce the problem.
Yegor
> Hello everyone,
> I have a ppt file as template and I want to replace some parts of
> text (tagged between < and >) of the text in it. Therefore I loop
> over each slide, get the TextRuns and RichTextRuns, and call
> richTextRun.setText(text) for updating the presentation and keeping the
> styles.
> At the end, I write the SlideShow to a new file. But when I open
> the output with PowerPoint, I get an error...
> I use POI 3.1-beta1 and PowerPoint2003 SP3 on WindowsXP.
> Am I doing something wrong? Is there another method to setText and keep the
> existing styles ?
> Here is my java code for creating the new file:
> try {
> SlideShow ppt = POIUtil.openSlideShow(TEMPLATE);
> //get the slides
> Slide[] slides = ppt.getSlides();
> if (slides == null || slides.length == 0) {
> System.out.println(TEMPLATE + " doesn't contains any slide.");
> return;
> }
> Pattern pattern = Pattern.compile(REGEXP);
> final Map<String, Object> map = TestData.getTestData();
> Matcher matcher = null;
> StringBuilder sb = new StringBuilder();
> //iterate all slides
> for (Slide slide : slides) {
> TextRun[] textRuns = slide.getTextRuns();
> if (textRuns == null || textRuns.length == 0) {
> //no text runs. go to next slide.
> continue;
> }
> System.out.println("slide number:" + slide.getSlideNumber());
> for (TextRun run : textRuns) {
> RichTextRun[] richTextRuns = run.getRichTextRuns();
> if (richTextRuns == null || richTextRuns.length == 0) {
> //no rich text run. go to next text run.
> continue;
> }
> for (RichTextRun richTextRun : richTextRuns) {
> //empty the string builder.
> sb.delete(0, sb.length());
> //set the text into the stringbuilder
> sb.append(richTextRun.getText());
> POIUtil.printTextWithLineBreaks("oldText: " +
> richTextRun.getText());
> matcher = pattern.matcher(sb.toString());
> //get all replacements parameter.
> boolean change = false;
> while (matcher.find()) {
> change = true;
> String param = matcher.group();
> System.out.println("match found: " + param);
> //replace match in text.
> String replacement = POIUtil.getValue(map, param);
> System.out.println(param + " replaced by " +
> replacement);
> int start = sb.indexOf(param);
> int end = start + param.length();
> sb.replace(start, end, replacement);
> }
> if (change) {
> POIUtil.printTextWithLineBreaks("new text: " +
> sb.toString());
> }
> if (change) {
> System.out.println("text changed");
> richTextRun.setText(sb.toString());
> }
> }
> }
> System.out.println();
> }
> POIUtil.writeSlideShow(ppt, OUTPUT);
> } catch (IOException e) {
> // TODO Auto-generated catch block
> e.printStackTrace();
> }
> Sylvain
> _________________________________________________________________
> Il est temps de rejoindre la famille - Mettez-vous dès maintenant
> gratuitement à la nouvelle génération des services Windows Live!
> http://get.live.com
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]