Hi All, We (HSLF developers) are searching for good object model to work with the character and paragraph styles. It would be good to discuss a possible architecture and know your opinions, before we settle. Working with text is a key feature of a PowerPoint API and this discussion won't harm. :))
A possible solution to handle character styles is to use java.text.AttributedString, a standard Java class which is meant for working with format runs in Java2D. Use cases may look as follows: (a) Create a text box and set character format: org.apache.poi.hslf.model.TextRun txrun = ...; //HSLF object which represents a run of text in a powerpoint document String text = "Hello, World"; txrun.settext(text) AttributedString str = txrun.getCharacterStyle(); str.addAttribute(TextAttribute.FAMILY, "Arial"); //set the font family to the entire string str.addAttribute(TextAttribute.SIZE, new Float(32), 0, 5); //set the font size to a a subrange str.addAttribute(TextAttribute.FOREGROUND, Color.red, 3, 6);//set the font color to a a subrange (b) For a text run read format runs or get attributes at the specified position: org.apache.poi.hslf.model.TextRun txrun = ...; String text = txrun.getText(); AttributedString str = txrun.getCharacterStyle(); //iterate over format runs AttributedCharacterIterator it = str.getIterator(); int index = 0; while (index < it.getEndIndex()) { it.setIndex(index); inr runLimit = it.getRunLimit(); Map attrs = it.getAttributes(); String fragment = text.substring(index , runLimit); System.out.println("[" + fragment + "]: "+ attrs); index = runLimit; } //get format attributes at the specified position: it.setIndex(8); Map attr = it.getAttributes(); System.out.println("attributes at position 8: " + attr); Advantages of this approach: - there are lots of docs on Java2D and people can use their previous experience or read recommended books to learn more how to use java.text.AttributedString. - This part of HSLF becomes compatible with Java graphics. Users can use the AttributedString object to paint the string using java.awt.Graphics: Graphics2D.drawString(AttributedCharacterIterator iterator, float x, float y) should output something similar to what you see in PowerPoint. - We don't need any special objects to handle stylings. (Currently we have RichTextRun object with getters and setters for font name, font size, bold/italic/underline, etc). All is done via the standard methods of java.text.AttributedString. Drawbacks: - My main concern is that the exposing of AttributedString may not be user-friendly. Also I'm not sure if this approach will fit for working with paragraph styles. I think that the API to work with paragraph styles should be symmetrical, i.e. set paragraph attributes via AttributedString: AttributedString str = txrun.getParagraphStyle(); //do paragraph styling So, I would like to hear you comments. Also, If anyone knows a good alternative to the suggested architecture - please share your knowledge. Regards, Yegor Kozlov --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] Mailing List: http://jakarta.apache.org/site/mail2.html#poi The Apache Jakarta POI Project: http://jakarta.apache.org/poi/