Wiki

Clone wiki

Aspose Java for Docx4j / Create-Table-in-Slide

Aspose.Slides

//Instantiate Presentation class that represents PPTX file
Presentation pres = new Presentation();

//Access first slide
ISlide sld = pres.getSlides().get_Item(0);

//Define columns with widths and rows with heights
double[] dblCols = { 50, 50, 50 };
double[] dblRows = { 50, 30, 30, 30, 30 };

//Add table shape to slide
ITable tbl = sld.getShapes().addTable(100, 50, dblCols, dblRows);

//Set border format for each cell
for(int row = 0; row < tbl.getRows().size(); row++)
{
    for (int cell = 0; cell < tbl.getRows().get_Item(row).size(); cell++)
    {
        tbl.getRows().get_Item(row).get_Item(cell).getBorderTop().getFillFormat().setFillType(FillType.Solid);
        tbl.getRows().get_Item(row).get_Item(cell).getBorderTop().getFillFormat().getSolidFillColor().setColor(Color.RED);
        tbl.getRows().get_Item(row).get_Item(cell).getBorderTop().setWidth(5);

        tbl.getRows().get_Item(row).get_Item(cell).getBorderBottom().getFillFormat().setFillType(FillType.Solid);
        tbl.getRows().get_Item(row).get_Item(cell).getBorderBottom().getFillFormat().getSolidFillColor().setColor(Color.RED);
        tbl.getRows().get_Item(row).get_Item(cell).getBorderBottom().setWidth(5);

        tbl.getRows().get_Item(row).get_Item(cell).getBorderLeft().getFillFormat().setFillType(FillType.Solid);
        tbl.getRows().get_Item(row).get_Item(cell).getBorderLeft().getFillFormat().getSolidFillColor().setColor(Color.RED);
        tbl.getRows().get_Item(row).get_Item(cell).getBorderLeft().setWidth(5);

        tbl.getRows().get_Item(row).get_Item(cell).getBorderRight().getFillFormat().setFillType(FillType.Solid);
        tbl.getRows().get_Item(row).get_Item(cell).getBorderRight().getFillFormat().getSolidFillColor().setColor(Color.RED);
        tbl.getRows().get_Item(row).get_Item(cell).getBorderRight().setWidth(5);
    }
}
//Merge cells 1 & 2 of row 1
tbl.mergeCells(tbl.getRows().get_Item(0).get_Item(0), tbl.getRows().get_Item(1).get_Item(0), false);

//Add text to the merged cell
tbl.getRows().get_Item(0).get_Item(0).getTextFrame().setText("Merged Cells");

//Save PPTX to Disk
pres.save("data/pptx4j/Tables-Aspose.pptx", SaveFormat.Pptx);

PPTX4j

public static void main(String[] args) throws Exception {

    // Where will we save our new .ppxt?
    String outputfilepath = "data/pptx4j/Tables-Pptx4j.pptx";

    // Create skeletal package, including a MainPresentationPart and a SlideLayoutPart
    PresentationMLPackage presentationMLPackage = PresentationMLPackage.createPackage(); 

    // Need references to these parts to create a slide
    // Please note that these parts *already exist* - they are
    // created by createPackage() above.  See that method
    // for instruction on how to create and add a part.
    MainPresentationPart pp = (MainPresentationPart)presentationMLPackage.getParts().getParts().get(
            new PartName("/ppt/presentation.xml"));     
    SlideLayoutPart layoutPart = (SlideLayoutPart)presentationMLPackage.getParts().getParts().get(
            new PartName("/ppt/slideLayouts/slideLayout1.xml"));

    // OK, now we can create a slide
    SlidePart slidePart = presentationMLPackage.createSlidePart(pp, layoutPart, 
            new PartName("/ppt/slides/slide1.xml"));

    // Method 1 - programmatic
    slidePart.getJaxbElement().getCSld().getSpTree().getSpOrGrpSpOrGraphicFrame().add( getTable() );

    // Method 2 - from string - on slide 2
    SlidePart slide2 = presentationMLPackage.createSlidePart(pp, layoutPart, 
            new PartName("/ppt/slides/slide2.xml"));
    slide2.getJaxbElement().getCSld().getSpTree().getSpOrGrpSpOrGraphicFrame().add( createGraphicFrameFromString() );

    // All done: save it
    presentationMLPackage.save(new java.io.File(outputfilepath));

    System.out.println("\n\n done .. saved " + outputfilepath);

}   

public static CTGraphicalObjectFrame getTable() throws JAXBException {

    // instatiation the factory for later object creation.
    org.docx4j.dml.ObjectFactory dmlFactory = new org.docx4j.dml.ObjectFactory();
    org.pptx4j.pml.ObjectFactory pmlFactory = new org.pptx4j.pml.ObjectFactory();

    // Node Creation
    CTGraphicalObjectFrame graphicFrame = pmlFactory
            .createCTGraphicalObjectFrame();
    org.pptx4j.pml.CTGraphicalObjectFrameNonVisual nvGraphicFramePr = pmlFactory
            .createCTGraphicalObjectFrameNonVisual();
    org.docx4j.dml.CTNonVisualDrawingProps cNvPr = dmlFactory
            .createCTNonVisualDrawingProps();
    org.docx4j.dml.CTNonVisualGraphicFrameProperties cNvGraphicFramePr = dmlFactory
            .createCTNonVisualGraphicFrameProperties();
    org.docx4j.dml.CTGraphicalObjectFrameLocking graphicFrameLocks = new org.docx4j.dml.CTGraphicalObjectFrameLocking();
    org.docx4j.dml.CTTransform2D xfrm = dmlFactory.createCTTransform2D();
    Graphic graphic = dmlFactory.createGraphic();
    GraphicData graphicData = dmlFactory.createGraphicData();

    // Build the parent-child relationship of this slides.xml
    graphicFrame.setNvGraphicFramePr(nvGraphicFramePr);
    nvGraphicFramePr.setCNvPr(cNvPr);
    cNvPr.setName("1");
    nvGraphicFramePr.setCNvGraphicFramePr(cNvGraphicFramePr);
    cNvGraphicFramePr.setGraphicFrameLocks(graphicFrameLocks);
    graphicFrameLocks.setNoGrp(true);
    nvGraphicFramePr.setNvPr(pmlFactory.createNvPr());

//        <p:xfrm>
//        <a:off x="1524000" y="1397000"/>
//        <a:ext cx="6096000" cy="741680"/>
//      </p:xfrm>
    graphicFrame.setXfrm(xfrm);

    CTPositiveSize2D ext = dmlFactory.createCTPositiveSize2D();
    ext.setCx(6096000);
    ext.setCy(741680);

    xfrm.setExt(ext);

    CTPoint2D off = dmlFactory.createCTPoint2D();
    xfrm.setOff(off);
    off.setX(1524000);
    off.setY(1397000);

    graphicFrame.setGraphic(graphic);

    graphic.setGraphicData(graphicData);
    graphicData
            .setUri("http://schemas.openxmlformats.org/drawingml/2006/table");

    CTTable ctTable = dmlFactory.createCTTable();
    JAXBElement<CTTable> tbl = dmlFactory.createTbl(ctTable);
    graphicData.getAny().add(tbl);

    CTTableGrid ctTableGrid = dmlFactory.createCTTableGrid();       
    CTTableCol gridCol = dmlFactory.createCTTableCol();
    ctTable.setTblGrid(ctTableGrid);
    ctTableGrid.getGridCol().add(gridCol);
    ctTableGrid.getGridCol().add(gridCol);
    gridCol.setW(300000);

    CTTableRow ctTableRow = dmlFactory.createCTTableRow();
    ctTableRow.setH(370840);


    ctTableRow.getTc().add(createTableCell());
    ctTableRow.getTc().add(createTableCell());

    for (int i = 0; i < 4; i++) {
        ctTable.getTr().add(ctTableRow);
    }

    return graphicFrame;
}   

public static CTTableCell createTableCell() throws JAXBException {
   String contents =
    "<a:tc  xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">" +
    "<a:txBody>"
        +"<a:bodyPr/>"
        +"<a:lstStyle/>"
        +"<a:p>"
          +"<a:r>"
            +"<a:rPr lang=\"en-AU\" dirty=\"0\" smtClean=\"0\"/>"
            +"<a:t>11</a:t>"
          +"</a:r>"
          +"<a:endParaRPr lang=\"en-AU\" dirty=\"0\"/>"
          +"</a:p>"
      +"</a:txBody>" +
      "</a:tc>";
      //+"<a:tcPr/>
   return ((CTTableCell)XmlUtils.unmarshalString(contents,org.docx4j.jaxb.Context.jc, CTTableCell.class));

}

public static CTGraphicalObjectFrame createGraphicFrameFromString() throws JAXBException {

        String tableau = 
                 "<p:graphicFrame xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\">" + 
                 "        <p:nvGraphicFramePr>" + 
                 "          <p:cNvPr id=\"4\" name=\"Table 3\"/>" + 
                 "          <p:cNvGraphicFramePr>" + 
                 "            <a:graphicFrameLocks noGrp=\"1\"/>" + 
                 "          </p:cNvGraphicFramePr>" + 
                 "          <p:nvPr/>" + 
                 "        </p:nvGraphicFramePr>" + 
                 "        <p:xfrm>" + 
                 "          <a:off x=\"1524000\" y=\"1397000\"/>" + 
                 "          <a:ext cx=\"6096000\" cy=\"741680\"/>" + 
                 "        </p:xfrm>" + 
                 "        <a:graphic>" + 
                 "          <a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/table\">" + 
                 "            <a:tbl>" + 
                 "              <a:tblPr firstRow=\"1\" bandRow=\"1\">" + 
                 "                <a:tableStyleId>{5C22544A-7EE6-4342-B048-85BDC9FD1C3A}</a:tableStyleId>" + 
                 "              </a:tblPr>" + 
                 "              <a:tblGrid>" + 
                 "                <a:gridCol w=\"3048000\"/>" + 
                 "                <a:gridCol w=\"3048000\"/>" + 
                 "              </a:tblGrid>" + 
                 "              <a:tr h=\"370840\">" + 
                 "                <a:tc>" + 
                 "                  <a:txBody>" + 
                 "                    <a:bodyPr/>" + 
                 "                    <a:lstStyle/>" + 
                 "                    <a:p>" + 
                 "                      <a:r>" + 
                 "                        <a:rPr lang=\"en-AU\" dirty=\"0\" smtClean=\"0\"/>" + 
                 "                        <a:t>11</a:t>" + 
                 "                      </a:r>" + 
                 "                      <a:endParaRPr lang=\"en-AU\" dirty=\"0\"/>" + 
                 "                    </a:p>" + 
                 "                  </a:txBody>" + 
                 "                  <a:tcPr/>" + 
                 "                </a:tc>" + 
                 "                <a:tc>" + 
                 "                  <a:txBody>" + 
                 "                    <a:bodyPr/>" + 
                 "                    <a:lstStyle/>" + 
                 "                    <a:p>" + 
                 "                      <a:r>" + 
                 "                        <a:rPr lang=\"en-AU\" dirty=\"0\" smtClean=\"0\"/>" + 
                 "                        <a:t>12</a:t>" + 
                 "                      </a:r>" + 
                 "                      <a:endParaRPr lang=\"en-AU\" dirty=\"0\"/>" + 
                 "                    </a:p>" + 
                 "                  </a:txBody>" + 
                 "                  <a:tcPr/>" + 
                 "                </a:tc>" + 
                 "              </a:tr>" + 
                 "              <a:tr h=\"370840\">" + 
                 "                <a:tc>" + 
                 "                  <a:txBody>" + 
                 "                    <a:bodyPr/>" + 
                 "                    <a:lstStyle/>" + 
                 "                    <a:p>" + 
                 "                      <a:r>" + 
                 "                        <a:rPr lang=\"en-AU\" dirty=\"0\" smtClean=\"0\"/>" + 
                 "                        <a:t>21</a:t>" + 
                 "                      </a:r>" + 
                 "                      <a:endParaRPr lang=\"en-AU\" dirty=\"0\"/>" + 
                 "                    </a:p>" + 
                 "                  </a:txBody>" + 
                 "                  <a:tcPr/>" + 
                 "                </a:tc>" + 
                 "                <a:tc>" + 
                 "                  <a:txBody>" + 
                 "                    <a:bodyPr/>" + 
                 "                    <a:lstStyle/>" + 
                 "                    <a:p>" + 
                 "                      <a:r>" + 
                 "                        <a:rPr lang=\"en-AU\" dirty=\"0\" smtClean=\"0\"/>" + 
                 "                        <a:t>22</a:t>" + 
                 "                      </a:r>" + 
                 "                      <a:endParaRPr lang=\"en-AU\" dirty=\"0\"/>" + 
                 "                    </a:p>" + 
                 "                  </a:txBody>" + 
                 "                  <a:tcPr/>" + 
                 "                </a:tc>" + 
                 "              </a:tr>" + 
                 "            </a:tbl>" + 
                 "          </a:graphicData>" + 
                 "        </a:graphic>" + 
                 "      </p:graphicFrame>";


        return (CTGraphicalObjectFrame) XmlUtils.unmarshalString(tableau, Context.jcPML,
                CTGraphicalObjectFrame.class);

}

Download Source Code

Updated