123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330 |
- /* ====================================================================
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- ==================================================================== */
-
- package org.apache.poi.examples.hssf.usermodel;
-
- import java.io.ByteArrayOutputStream;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
-
- import org.apache.poi.hssf.usermodel.HSSFChildAnchor;
- import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
- import org.apache.poi.hssf.usermodel.HSSFFont;
- import org.apache.poi.hssf.usermodel.HSSFPatriarch;
- import org.apache.poi.hssf.usermodel.HSSFPicture;
- import org.apache.poi.hssf.usermodel.HSSFPolygon;
- import org.apache.poi.hssf.usermodel.HSSFRichTextString;
- import org.apache.poi.hssf.usermodel.HSSFRow;
- import org.apache.poi.hssf.usermodel.HSSFShape;
- import org.apache.poi.hssf.usermodel.HSSFShapeGroup;
- import org.apache.poi.hssf.usermodel.HSSFSheet;
- import org.apache.poi.hssf.usermodel.HSSFSimpleShape;
- import org.apache.poi.hssf.usermodel.HSSFTextbox;
- import org.apache.poi.hssf.usermodel.HSSFWorkbook;
- import org.apache.poi.ss.usermodel.ClientAnchor.AnchorType;
- import org.apache.poi.ss.usermodel.Font;
- import org.apache.poi.ss.usermodel.Workbook;
-
- /**
- * Demonstrates how to use the office drawing capabilities of POI.
- */
- public final class OfficeDrawing {
- private OfficeDrawing() {}
-
- public static void main(String[] args) throws IOException {
- // Create the workbook and sheets.
- try (HSSFWorkbook wb = new HSSFWorkbook()) {
- HSSFSheet sheet1 = wb.createSheet("new sheet");
- HSSFSheet sheet2 = wb.createSheet("second sheet");
- HSSFSheet sheet3 = wb.createSheet("third sheet");
- HSSFSheet sheet4 = wb.createSheet("fourth sheet");
- HSSFSheet sheet5 = wb.createSheet("fifth sheet");
-
- // Draw stuff in them
- drawSheet1(sheet1);
- drawSheet2(sheet2);
- drawSheet3(sheet3);
- drawSheet4(sheet4, wb);
- drawSheet5(sheet5, wb);
-
- // Write the file out.
- try (FileOutputStream fileOut = new FileOutputStream("workbook.xls")) {
- wb.write(fileOut);
- }
- }
- }
-
- private static void drawSheet1( HSSFSheet sheet1 )
- {
- // Create a row and size one of the cells reasonably large.
- HSSFRow row = sheet1.createRow(2);
- row.setHeight((short) 2800);
- row.createCell(1);
- sheet1.setColumnWidth(2, 9000);
-
- // Create the drawing patriarch. This is the top level container for
- // all shapes.
- HSSFPatriarch patriarch = sheet1.createDrawingPatriarch();
-
- // Draw some lines and an oval.
- drawLinesToCenter( patriarch );
- drawManyLines( patriarch );
- drawOval( patriarch );
- drawPolygon( patriarch );
-
- // Draw a rectangle.
- HSSFSimpleShape rect = patriarch.createSimpleShape( new HSSFClientAnchor(100, 100, 900, 200, (short)0, 0, (short)0, 0) );
- rect.setShapeType(HSSFSimpleShape.OBJECT_TYPE_RECTANGLE);
- }
-
- private static void drawSheet2( HSSFSheet sheet2 )
- {
- // Create a row and size one of the cells reasonably large.
- HSSFRow row = sheet2.createRow(2);
- row.createCell(1);
- row.setHeightInPoints(240);
- sheet2.setColumnWidth(2, 9000);
-
- // Create the drawing patriarch. This is the top level container for
- // all shapes. This will clear out any existing shapes for that sheet.
- HSSFPatriarch patriarch = sheet2.createDrawingPatriarch();
-
- // Draw a grid in one of the cells.
- drawGrid( patriarch );
- }
-
- private static void drawSheet3( HSSFSheet sheet3 )
- {
- // Create a row and size one of the cells reasonably large
- HSSFRow row = sheet3.createRow(2);
- row.setHeightInPoints(140);
- row.createCell(1);
- sheet3.setColumnWidth(2, 9000);
-
- // Create the drawing patriarch. This is the top level container for
- // all shapes. This will clear out any existing shapes for that sheet.
- HSSFPatriarch patriarch = sheet3.createDrawingPatriarch();
-
- // Create a shape group.
- HSSFShapeGroup group = patriarch.createGroup(
- new HSSFClientAnchor(0,0,900,200,(short)2,2,(short)2,2));
-
- // Create a couple of lines in the group.
- HSSFSimpleShape shape1 = group.createShape(new HSSFChildAnchor(3,3,500,500));
- shape1.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE);
- ( (HSSFChildAnchor) shape1.getAnchor() ).setAnchor((short)3,3,500,500);
- HSSFSimpleShape shape2 = group.createShape(new HSSFChildAnchor((short)1,200,400,600));
- shape2.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE);
-
- }
-
- private static void drawSheet4( HSSFSheet sheet4, HSSFWorkbook wb )
- {
- // Create the drawing patriarch. This is the top level container for
- // all shapes. This will clear out any existing shapes for that sheet.
- HSSFPatriarch patriarch = sheet4.createDrawingPatriarch();
-
- // Create a couple of textboxes
- HSSFTextbox textbox1 = patriarch.createTextbox(
- new HSSFClientAnchor(0,0,0,0,(short)1,1,(short)2,2));
- textbox1.setString(new HSSFRichTextString("This is a test") );
- HSSFTextbox textbox2 = patriarch.createTextbox(
- new HSSFClientAnchor(0,0,900,100,(short)3,3,(short)3,4));
- textbox2.setString(new HSSFRichTextString("Woo") );
- textbox2.setFillColor(200,0,0);
- textbox2.setLineStyle(HSSFShape.LINESTYLE_DOTGEL);
-
- // Create third one with some fancy font styling.
- HSSFTextbox textbox3 = patriarch.createTextbox(
- new HSSFClientAnchor(0,0,900,100,(short)4,4,(short)5,4+1));
- HSSFFont font = wb.createFont();
- font.setItalic(true);
- font.setUnderline(Font.U_DOUBLE);
- HSSFRichTextString string = new HSSFRichTextString("Woo!!!");
- string.applyFont(2,5,font);
- textbox3.setString(string );
- textbox3.setFillColor(0x08000030);
- textbox3.setLineStyle(HSSFShape.LINESTYLE_NONE); // no line around the textbox.
- textbox3.setNoFill(true); // make it transparent
- }
-
- private static void drawSheet5( HSSFSheet sheet5, HSSFWorkbook wb ) throws IOException
- {
-
- // Create the drawing patriarch. This is the top level container for
- // all shapes. This will clear out any existing shapes for that sheet.
- HSSFPatriarch patriarch = sheet5.createDrawingPatriarch();
-
- HSSFClientAnchor anchor;
- anchor = new HSSFClientAnchor(0,0,0,255,(short)2,2,(short)4,7);
- anchor.setAnchorType( AnchorType.MOVE_DONT_RESIZE );
- patriarch.createPicture(anchor, loadPicture( "src/resources/logos/logoKarmokar4.png", wb ));
-
- anchor = new HSSFClientAnchor(0,0,0,255,(short)4,2,(short)5,7);
- anchor.setAnchorType( AnchorType.MOVE_DONT_RESIZE );
- patriarch.createPicture(anchor, loadPicture( "src/resources/logos/logoKarmokar4edited.png", wb ));
-
- anchor = new HSSFClientAnchor(0,0,1023,255,(short)6,2,(short)8,7);
- anchor.setAnchorType( AnchorType.MOVE_DONT_RESIZE );
- HSSFPicture picture = patriarch.createPicture(anchor, loadPicture( "src/resources/logos/logoKarmokar4s.png", wb ));
- //Reset the image to the original size.
- picture.resize();
- picture.setLineStyle( HSSFShape.LINESTYLE_DASHDOTGEL );
-
- }
-
- private static int loadPicture( String path, HSSFWorkbook wb ) throws IOException
- {
- int pictureIndex;
- try (FileInputStream fis = new FileInputStream(path);
- ByteArrayOutputStream bos = new ByteArrayOutputStream()) {
- int c;
- while ((c = fis.read()) != -1)
- bos.write(c);
- pictureIndex = wb.addPicture(bos.toByteArray(), Workbook.PICTURE_TYPE_PNG);
- }
- return pictureIndex;
- }
-
- private static void drawOval( HSSFPatriarch patriarch )
- {
- // Create an oval and style to taste.
- HSSFClientAnchor a = new HSSFClientAnchor();
- a.setAnchor((short)2, 2, 20, 20, (short) 2, 2, 190, 80);
- HSSFSimpleShape s = patriarch.createSimpleShape(a);
- s.setShapeType(HSSFSimpleShape.OBJECT_TYPE_OVAL);
- s.setLineStyleColor(10,10,10);
- s.setFillColor(90,10,200);
- s.setLineWidth(HSSFShape.LINEWIDTH_ONE_PT * 3);
- s.setLineStyle(HSSFShape.LINESTYLE_DOTSYS);
- }
-
- private static void drawPolygon( HSSFPatriarch patriarch )
- {
- // HSSFClientAnchor a = new HSSFClientAnchor( 0, 0, 1023, 255, (short) 2, 2, (short) 3, 3 );
- // HSSFPolygon p = patriarch.createPolygon(a);
- // p.setPolygonDrawArea(100,100);
- // p.setPoints( new int[]{30, 90, 50}, new int[]{88, 5, 44} );
-
-
- HSSFClientAnchor a = new HSSFClientAnchor();
- a.setAnchor( (short) 2, 2, 0, 0, (short) 3, 3, 1023, 255 );
- HSSFShapeGroup g = patriarch.createGroup( a );
- g.setCoordinates(0,0,200,200);
- HSSFPolygon p1 = g.createPolygon( new HSSFChildAnchor( 0, 0, 200, 200 ) );
- p1.setPolygonDrawArea( 100, 100 );
- p1.setPoints( new int[]{0, 90, 50}, new int[]{5, 5, 44} );
- p1.setFillColor( 0, 255, 0 );
- HSSFPolygon p2 = g.createPolygon( new HSSFChildAnchor( 20, 20, 200, 200 ) );
- p2.setPolygonDrawArea( 200, 200 );
- p2.setPoints( new int[]{120, 20, 150}, new int[]{105, 30, 195} );
- p2.setFillColor( 255, 0, 0 );
- }
-
- private static void drawManyLines( HSSFPatriarch patriarch )
- {
- // Draw bunch of lines
- int x1 = 100;
- int y1 = 100;
- int x2 = 800;
- int y2 = 200;
- int color = 0;
- for (int i = 0; i < 10; i++)
- {
- HSSFClientAnchor a2 = new HSSFClientAnchor();
- a2.setAnchor((short) 2, 2, x1, y1, (short) 2, 2, x2, y2);
- HSSFSimpleShape shape2 = patriarch.createSimpleShape(a2);
- shape2.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE);
- shape2.setLineStyleColor(color);
- y1 -= 10;
- y2 -= 10;
- color += 30;
- }
- }
-
- private static void drawGrid( HSSFPatriarch patriarch )
- {
- // This draws a grid of lines. Since the coordinates space fixed at
- // 1024 by 256 we use a ratio to get a reasonably square grids.
-
- double xRatio = 3.22;
- double yRatio = 0.6711;
-
- int x1 = 0;
- int y1 = 0;
- int x2 = 0;
- int y2 = 200;
- for (int i = 0; i < 20; i++)
- {
- HSSFClientAnchor a2 = new HSSFClientAnchor();
- a2.setAnchor((short) 2, 2, (int) ( x1 * xRatio ), (int) ( y1 * yRatio ),
- (short) 2, 2, (int) ( x2 * xRatio ), (int) ( y2 * yRatio ));
- HSSFSimpleShape shape2 = patriarch.createSimpleShape(a2);
- shape2.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE);
-
- x1 += 10;
- x2 += 10;
- }
-
- x1 = 0;
- y1 = 0;
- x2 = 200;
- y2 = 0;
- for (int i = 0; i < 20; i++)
- {
- HSSFClientAnchor a2 = new HSSFClientAnchor();
- a2.setAnchor((short) 2, 2, (int) ( x1 * xRatio ), (int) ( y1 * yRatio ),
- (short) 2, 2, (int) ( x2 * xRatio ), (int) ( y2 * yRatio ));
- HSSFSimpleShape shape2 = patriarch.createSimpleShape(a2);
- shape2.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE);
-
- y1 += 10;
- y2 += 10;
- }
- }
-
- private static void drawLinesToCenter( HSSFPatriarch patriarch )
- {
- // Draw some lines from and to the corners
- {
- HSSFClientAnchor a1 = new HSSFClientAnchor();
- a1.setAnchor( (short)2, 2, 0, 0, (short) 2, 2, 512, 128);
- HSSFSimpleShape shape1 = patriarch.createSimpleShape(a1);
- shape1.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE);
- }
- {
- HSSFClientAnchor a1 = new HSSFClientAnchor();
- a1.setAnchor( (short)2, 2, 512, 128, (short) 2, 2, 1024, 0);
- HSSFSimpleShape shape1 = patriarch.createSimpleShape(a1);
- shape1.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE);
- }
- {
- HSSFClientAnchor a1 = new HSSFClientAnchor();
- a1.setAnchor( (short)1, 1, 0, 0, (short) 1, 1, 512, 100);
- HSSFSimpleShape shape1 = patriarch.createSimpleShape(a1);
- shape1.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE);
- }
- {
- HSSFClientAnchor a1 = new HSSFClientAnchor();
- a1.setAnchor( (short)1, 1, 512, 100, (short) 1, 1, 1024, 0);
- HSSFSimpleShape shape1 = patriarch.createSimpleShape(a1);
- shape1.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE);
- }
-
- }
- }
|