diff --git a/src/documentation/content/xdocs/hssf/quick-guide.xml b/src/documentation/content/xdocs/hssf/quick-guide.xml index 39a175338..df76e74a6 100644 --- a/src/documentation/content/xdocs/hssf/quick-guide.xml +++ b/src/documentation/content/xdocs/hssf/quick-guide.xml @@ -40,6 +40,9 @@
@@ -692,6 +696,211 @@ fileOut.close();
+ POI supports drawing shapes using the Microsoft Office
+ drawing tools. Shapes on a sheet are organized in a
+ hiearchy of groups and and shapes. The top-most shape
+ is the patriarch. This is not visisble on the sheet
+ at all. To start drawing you need to call createPatriarch
+ on the HSSFSheet
class. This has the
+ effect erasing any other shape information stored
+ in that sheet. By default POI will leave shape
+ records alone in the sheet unless you make a call to
+ this method.
+
+ To create a shape you have to go through the following + steps: +
++ Text boxes are created using a different call: +
+ ++ It's possible to use different fonts to style parts of + the text in the textbox. Here's how: +
+ +
+ Just as can be done manually using Excel, it is possible
+ to group shapes together. This is done by calling
+ createGroup()
and then creating the shapes
+ using those groups.
+
+ It's also possible to create groups within groups. +
++ Here's how to create a shape group: +
+ +
+ If you're being observant you'll noticed that the shapes
+ that are added to the group use a new type of anchor:
+ the HSSFChildAnchor
. What happens is that
+ the created group has it's own coordinate space for
+ shapes that are placed into it. POI defaults this to
+ (0,0,1023,255) but you are able to change it as desired.
+ Here's how:
+
+ If you create a group within a group it's also going + to have it's own coordinate space. +
++ By default shapes can look a little plain. It's possible + to apply different styles to the shapes however. The + sorts of things that can currently be done are: +
++ Here's an examples of how this is done: +
+ +
+ While the native POI shape drawing commands are the
+ recommended way to draw shapes in a shape it's sometimes
+ desirable to use a standard API for compatibility with
+ external libraries. With this in mind we created some
+ wrappers for Graphics
and Graphics2d
.
+
Graphics2d
is a poor match to the capabilities
+ of the Microsoft Office drawing commands. The older
+ Graphics
class offers a closer match but is
+ still a square peg in a round hole.
+
+ All Graphics commands are issued into an HSSFShapeGroup
.
+ Here's how it's done:
+
+ The first thing we do is create the group and set it's coordinates
+ to match what we plan to draw. Next we calculate a reasonable
+ fontSizeMultipler then create the EscherGraphics object.
+ Since what we really want is a Graphics2d
+ object we create an EscherGraphics2d object and pass in
+ the graphics object we created. Finally we call a routine
+ that draws into the EscherGraphics2d object.
+
+ The vertical points per pixel deserves some more explanation. + One of the difficulties in converting Graphics calls + into escher drawing calls is that Excel does not have + the concept of absolute pixel positions. It measures + it's cell widths in 'characters' and the cell heights in points. + Unfortunately it's not defined exactly what type of character it's + measuring. Presumably this is due to the fact that the Excel will be + using different fonts on different platforms or even within the same + platform. +
++ Because of this constraint we've had to implement the concept of a + verticalPointsPerPixel. This the amount the font should be scaled by when + you issue commands such as drawString(). To calculate this value + use the follow formula: +
+ +
+ The height of the group is calculated fairly simply by calculating the
+ difference between the y coordinates of the bounding box of the shape. The
+ height of the group can be calculated by using a convenience called
+ HSSFClientAnchor.getAnchorHeightInPoints()
.
+
+ Many of the functions supported by the graphics classes + are not complete. Here's some of the functions that are known + to work. +
++ Functions that are not supported will return and log a message + using the POI logging infrastructure (disabled by default). +
+