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]

Reply via email to