/** Test setText single paragraph to ensure backwards compatibility */ public void testSetTextSingleParagraph() { XSSFWorkbook wb = new XSSFWorkbook(); XSSFSheet sheet = wb.createSheet(); XSSFDrawing drawing = sheet.createDrawingPatriarch(); XSSFTextBox shape = drawing.createTextbox(new XSSFClientAnchor(0, 0, 0, 0, 2, 2, 3, 4)); XSSFRichTextString rt = new XSSFRichTextString("Test String"); XSSFFont font = wb.createFont(); font.setColor(new XSSFColor(new Color(0, 255, 255))); font.setFontName("Arial"); rt.applyFont(font); shape.setText(rt); List<XSSFTextParagraph> paras = shape.getTextParagraphs(); assertEquals(1, paras.size()); assertEquals("Test String", paras.get(0).getText()); List<XSSFTextRun> runs = paras.get(0).getTextRuns(); assertEquals(1, runs.size()); assertEquals("Arial", runs.get(0).getFontFamily()); Color clr = runs.get(0).getFontColor(); assertArrayEquals( new int[] {0, 255, 255}, new int[] {clr.getRed(), clr.getGreen(), clr.getBlue()}); assertNotNull(XSSFTestDataSamples.writeOutAndReadBack(wb)); }
/** Test setting the text, then adding multiple paragraphs and retrieve text */ public void testSetAddMultipleParagraphs() { XSSFWorkbook wb = new XSSFWorkbook(); XSSFSheet sheet = wb.createSheet(); XSSFDrawing drawing = sheet.createDrawingPatriarch(); XSSFTextBox shape = drawing.createTextbox(new XSSFClientAnchor(0, 0, 0, 0, 2, 2, 3, 4)); shape.setText("Line 1"); XSSFTextParagraph para = shape.addNewTextParagraph(); para.addNewTextRun().setText("Line 2"); para = shape.addNewTextParagraph(); para.addNewTextRun().setText("Line 3"); List<XSSFTextParagraph> paras = shape.getTextParagraphs(); assertEquals( 3, paras .size()); // this should be 3 as we overwrote the default paragraph with setText, then // added 2 new paragraphs assertEquals("Line 1\nLine 2\nLine 3", shape.getText()); assertNotNull(XSSFTestDataSamples.writeOutAndReadBack(wb)); }
/** * ensure that font and color rich text attributes defined in a XSSFRichTextString are passed to * XSSFSimpleShape. * * <p>See Bugzilla 54969. */ public void testRichTextFontAndColor() { XSSFWorkbook wb = new XSSFWorkbook(); XSSFSheet sheet = wb.createSheet(); XSSFDrawing drawing = sheet.createDrawingPatriarch(); XSSFTextBox shape = drawing.createTextbox(new XSSFClientAnchor(0, 0, 0, 0, 2, 2, 3, 4)); XSSFRichTextString rt = new XSSFRichTextString("Test String"); XSSFFont font = wb.createFont(); font.setColor(new XSSFColor(new Color(0, 128, 128))); font.setFontName("Arial"); rt.applyFont(font); shape.setText(rt); CTTextParagraph pr = shape.getCTShape().getTxBody().getPArray(0); assertEquals(1, pr.sizeOfRArray()); CTTextCharacterProperties rPr = pr.getRArray(0).getRPr(); assertEquals("Arial", rPr.getLatin().getTypeface()); assertArrayEquals( new byte[] {0, (byte) 128, (byte) 128}, rPr.getSolidFill().getSrgbClr().getVal()); assertNotNull(XSSFTestDataSamples.writeOutAndReadBack(wb)); }
public void testNew() throws Exception { XSSFWorkbook wb = new XSSFWorkbook(); XSSFSheet sheet = wb.createSheet(); // multiple calls of createDrawingPatriarch should return the same instance of XSSFDrawing XSSFDrawing dr1 = sheet.createDrawingPatriarch(); XSSFDrawing dr2 = sheet.createDrawingPatriarch(); assertSame(dr1, dr2); List<POIXMLDocumentPart> rels = sheet.getRelations(); assertEquals(1, rels.size()); assertTrue(rels.get(0) instanceof XSSFDrawing); XSSFDrawing drawing = (XSSFDrawing) rels.get(0); String drawingId = drawing.getPackageRelationship().getId(); // there should be a relation to this drawing in the worksheet assertTrue(sheet.getCTWorksheet().isSetDrawing()); assertEquals(drawingId, sheet.getCTWorksheet().getDrawing().getId()); XSSFConnector c1 = drawing.createConnector(new XSSFClientAnchor(0, 0, 0, 0, 0, 0, 2, 2)); c1.setLineWidth(2.5); c1.setLineStyle(1); XSSFShapeGroup c2 = drawing.createGroup(new XSSFClientAnchor(0, 0, 0, 0, 0, 0, 5, 5)); assertNotNull(c2); XSSFSimpleShape c3 = drawing.createSimpleShape(new XSSFClientAnchor(0, 0, 0, 0, 2, 2, 3, 4)); c3.setText(new XSSFRichTextString("Test String")); c3.setFillColor(128, 128, 128); XSSFTextBox c4 = drawing.createTextbox(new XSSFClientAnchor(0, 0, 0, 0, 4, 4, 5, 6)); XSSFRichTextString rt = new XSSFRichTextString("Test String"); rt.applyFont(0, 5, wb.createFont()); rt.applyFont(5, 6, wb.createFont()); c4.setText(rt); c4.setNoFill(true); assertEquals(4, drawing.getCTDrawing().sizeOfTwoCellAnchorArray()); List<XSSFShape> shapes = drawing.getShapes(); assertEquals(4, shapes.size()); assertTrue(shapes.get(0) instanceof XSSFConnector); assertTrue(shapes.get(1) instanceof XSSFShapeGroup); assertTrue(shapes.get(2) instanceof XSSFSimpleShape); assertTrue(shapes.get(3) instanceof XSSFSimpleShape); // // Save and re-load it wb = XSSFTestDataSamples.writeOutAndReadBack(wb); sheet = wb.getSheetAt(0); // Check dr1 = sheet.createDrawingPatriarch(); CTDrawing ctDrawing = dr1.getCTDrawing(); // Connector, shapes and text boxes are all two cell anchors assertEquals(0, ctDrawing.sizeOfAbsoluteAnchorArray()); assertEquals(0, ctDrawing.sizeOfOneCellAnchorArray()); assertEquals(4, ctDrawing.sizeOfTwoCellAnchorArray()); shapes = dr1.getShapes(); assertEquals(4, shapes.size()); assertTrue(shapes.get(0) instanceof XSSFConnector); assertTrue(shapes.get(1) instanceof XSSFShapeGroup); assertTrue(shapes.get(2) instanceof XSSFSimpleShape); assertTrue(shapes.get(3) instanceof XSSFSimpleShape); // // Ensure it got the right namespaces String xml = ctDrawing.toString(); assertTrue( xml.contains( "xmlns:xdr=\"http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing\"")); assertTrue(xml.contains("xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\"")); assertNotNull(XSSFTestDataSamples.writeOutAndReadBack(wb)); }