104 lines
4.5 KiB
Java
104 lines
4.5 KiB
Java
/* ====================================================================
|
|
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.hssf.usermodel.examples;
|
|
|
|
import org.apache.poi.hssf.usermodel.*;
|
|
|
|
import java.awt.*;
|
|
import java.io.FileOutputStream;
|
|
import java.io.IOException;
|
|
|
|
/**
|
|
* Demonstrates the use of the EscherGraphics2d library.
|
|
*
|
|
* @author Glen Stampoultzis (glens at apache.org)
|
|
*/
|
|
public class OfficeDrawingWithGraphics {
|
|
public static void main( String[] args ) throws IOException {
|
|
// Create a workbook with one sheet and size the first three somewhat
|
|
// larger so we can fit the chemical structure diagram in.
|
|
HSSFWorkbook wb = new HSSFWorkbook();
|
|
HSSFSheet sheet = wb.createSheet( "my drawing" );
|
|
sheet.setColumnWidth(1, 256 * 27);
|
|
HSSFRow row1 = sheet.createRow(0);
|
|
row1.setHeightInPoints(10 * 15f);
|
|
HSSFRow row2 = sheet.createRow(1);
|
|
row2.setHeightInPoints(5 * 15f);
|
|
HSSFRow row3 = sheet.createRow(2);
|
|
row3.setHeightInPoints(10 * 15f);
|
|
|
|
// Add some cells so we can test that the anchoring works when we
|
|
// sort them.
|
|
row1.createCell(0).setCellValue("C");
|
|
row2.createCell(0).setCellValue("A");
|
|
row3.createCell(0).setCellValue("B");
|
|
|
|
// Create the top level drawing patriarch.
|
|
HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
|
|
|
|
HSSFClientAnchor a;
|
|
HSSFShapeGroup group;
|
|
EscherGraphics g;
|
|
EscherGraphics2d g2d;
|
|
// Anchor entirely within one cell.
|
|
a = new HSSFClientAnchor( 0, 0, 1023, 255, (short) 1, 0, (short) 1, 0 );
|
|
group = patriarch.createGroup( a );
|
|
group.setCoordinates( 0, 0, 320, 276 );
|
|
float verticalPointsPerPixel = a.getAnchorHeightInPoints(sheet) / Math.abs(group.getY2() - group.getY1());
|
|
g = new EscherGraphics( group, wb, Color.black, verticalPointsPerPixel );
|
|
g2d = new EscherGraphics2d( g );
|
|
drawStar( g2d );
|
|
|
|
a = new HSSFClientAnchor( 0, 0, 1023, 255, (short) 1, 1, (short) 1, 1 );
|
|
group = patriarch.createGroup( a );
|
|
group.setCoordinates( 0, 0, 640, 276 );
|
|
verticalPointsPerPixel = a.getAnchorHeightInPoints(sheet) / Math.abs(group.getY2() - group.getY1());
|
|
// verticalPixelsPerPoint = (float)Math.abs(group.getY2() - group.getY1()) / a.getAnchorHeightInPoints(sheet);
|
|
g = new EscherGraphics( group, wb, Color.black, verticalPointsPerPixel );
|
|
g2d = new EscherGraphics2d( g );
|
|
drawStar( g2d );
|
|
|
|
FileOutputStream out = new FileOutputStream("workbook.xls");
|
|
wb.write(out);
|
|
out.close();
|
|
|
|
}
|
|
|
|
private static void drawStar( EscherGraphics2d g2d )
|
|
{
|
|
g2d.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON );
|
|
for (double i = 0; i < Math.PI; i += 0.1)
|
|
{
|
|
g2d.setColor( new Color((int)(i * 5343062d) ) );
|
|
int x1 = (int) ( Math.cos(i) * 160.0 ) + 160;
|
|
int y1 = (int) ( Math.sin(i) * 138.0 ) + 138;
|
|
int x2 = (int) ( -Math.cos(i) * 160.0 ) + 160;
|
|
int y2 = (int) ( -Math.sin(i) * 138.0 ) + 138;
|
|
g2d.setStroke(new BasicStroke(2));
|
|
g2d.drawLine(x1,y1,x2,y2);
|
|
}
|
|
g2d.setFont(new Font("SansSerif",Font.BOLD | Font.ITALIC, 20));
|
|
g2d.drawString("EscherGraphics2d",70,100);
|
|
g2d.setColor(Color.yellow);
|
|
g2d.fillOval( 160-20,138-20,40,40);
|
|
g2d.setColor(Color.black);
|
|
g2d.fillPolygon(new int[] {-10+160,0+160,10+160,0+160}, new int[] {0+138,10+138,0+138,-10+138}, 4);
|
|
g2d.drawPolygon(new int[] {-160+160,0+160,160+160,0+160}, new int[] {0+138,138+138,0+138,-138+138}, 4);
|
|
}
|
|
}
|