Search in sources :

Example 1 with GridSpan

use of org.docx4j.wml.TcPrInner.GridSpan in project Java-Tutorial by gpcodervn.

the class ComplexTable method main.

public static void main(String[] args) throws Exception {
    System.out.println("Creating package..");
    wordMLPackage = WordprocessingMLPackage.createPackage();
    Tbl mainTable = factory.createTbl();
    TblPr tblPr = new TblPr();
    TblStyle tblStyle = new TblStyle();
    tblStyle.setVal("TableGrid");
    tblPr.setTblStyle(tblStyle);
    mainTable.setTblPr(tblPr);
    TblWidth width = new TblWidth();
    width.setType("auto");
    width.setW(new BigInteger("0"));
    tblPr.setTblW(width);
    // create row 1
    Tr tr = factory.createTr();
    // col 1 of row 1
    addTc(tr, "Ab", "Ab", "3192");
    // col 2 of row 1
    addTc(tr, "Ac", "Ac", "3192");
    // a vertically merged col
    addTcVMerge(tr, "test", "Vertical Merge", "restart", "9000");
    mainTable.getEGContentRowContent().add(tr);
    // create row 2
    Tr tr2 = factory.createTr();
    TrPr pr = new TrPr();
    tr2.setTrPr(pr);
    // col 1 of row 2
    Tc tc1 = factory.createTc();
    TcPr tcPr = new TcPr();
    TblWidth widtha = new TblWidth();
    widtha.setType("dxa");
    widtha.setW(new BigInteger("0"));
    tcPr.setTcW(widtha);
    tc1.setTcPr(tcPr);
    tc1.getEGBlockLevelElts().add(XmlUtils.unmarshalString(tblXML));
    // The following is important or you may get a corrupted docx file
    tc1.getEGBlockLevelElts().add(wordMLPackage.getMainDocumentPart().createParagraphOfText(""));
    tr2.getEGContentCellContent().add(tc1);
    mainTable.getEGContentRowContent().add(tr2);
    // col2 of row 2
    addTc(tr2, "bA", "bA", "3192");
    // end vertically merged col
    addTcVMerge(tr2, "", "", null, "9000");
    // create row 3
    Tr tr3 = factory.createTr();
    TrPr pr3 = new TrPr();
    tr3.setTrPr(pr3);
    Tc tc31 = factory.createTc();
    TcPr tcPr3 = new TcPr();
    TblWidth width31 = new TblWidth();
    width31.setType("dxa");
    width31.setW(new BigInteger("0"));
    tcPr3.setTcW(width31);
    // for setting colspan of 3
    GridSpan gridSpan = new GridSpan();
    gridSpan.setVal(new BigInteger("3"));
    tcPr3.setGridSpan(gridSpan);
    tc31.setTcPr(tcPr3);
    tc31.getEGBlockLevelElts().add(wordMLPackage.getMainDocumentPart().createParagraphOfText("Horizontal merge 3 col"));
    tr3.getEGContentCellContent().add(tc31);
    mainTable.getEGContentRowContent().add(tr3);
    // create row 4 -6384
    Tr tr4 = factory.createTr();
    TrPr pr4 = new TrPr();
    tr4.setTrPr(pr4);
    Tc tc41 = factory.createTc();
    TcPr tcPr4 = new TcPr();
    TblWidth width41 = new TblWidth();
    width41.setType("dxa");
    width41.setW(new BigInteger("0"));
    tcPr4.setTcW(width31);
    // for setting colspan of 3
    GridSpan gridSpan41 = new GridSpan();
    gridSpan41.setVal(new BigInteger("2"));
    tcPr4.setGridSpan(gridSpan41);
    tc41.setTcPr(tcPr4);
    tc41.getEGBlockLevelElts().add(wordMLPackage.getMainDocumentPart().createParagraphOfText("Horizontal merge 2 col"));
    tr4.getEGContentCellContent().add(tc41);
    // Add an image to the last col
    File file = new File("resources/image.png");
    java.io.InputStream is = new java.io.FileInputStream(file);
    long length = file.length();
    // It needs to be an int type.
    if (length > Integer.MAX_VALUE) {
        System.out.println("File too large!!");
    }
    byte[] bytes = new byte[(int) length];
    int offset = 0;
    int numRead = 0;
    while (offset < bytes.length && (numRead = is.read(bytes, offset, bytes.length - offset)) >= 0) {
        offset += numRead;
    }
    // Ensure all the bytes have been read in
    if (offset < bytes.length) {
        System.out.println("Could not completely read file " + file.getName());
    }
    is.close();
    String filenameHint = null;
    String altText = null;
    int id1 = 0;
    int id2 = 1;
    org.docx4j.wml.P p2 = newImage(wordMLPackage, bytes, filenameHint, altText, id1, id2, 3000);
    Tc tc42 = factory.createTc();
    tc42.getEGBlockLevelElts().add(p2);
    tr4.getEGContentCellContent().add(tc42);
    mainTable.getEGContentRowContent().add(tr4);
    wordMLPackage.getMainDocumentPart().addObject(mainTable);
    // Now save it
    wordMLPackage.save(new java.io.File("output/ComplexTable.docx"));
    System.out.println("Done.");
}
Also used : TblWidth(org.docx4j.wml.TblWidth) TrPr(org.docx4j.wml.TrPr) TblStyle(org.docx4j.wml.CTTblPrBase.TblStyle) TblPr(org.docx4j.wml.TblPr) File(java.io.File) Tc(org.docx4j.wml.Tc) TcPr(org.docx4j.wml.TcPr) BigInteger(java.math.BigInteger) File(java.io.File) Tr(org.docx4j.wml.Tr) Tbl(org.docx4j.wml.Tbl) GridSpan(org.docx4j.wml.TcPrInner.GridSpan)

Example 2 with GridSpan

use of org.docx4j.wml.TcPrInner.GridSpan in project Java-Tutorial by gpcodervn.

the class Docx4jUtils method setCellHMerge.

private void setCellHMerge(Tc tableCell, int horizontalMergedCells) {
    if (horizontalMergedCells > 1) {
        TcPr tableCellProperties = tableCell.getTcPr();
        if (tableCellProperties == null) {
            tableCellProperties = new TcPr();
            tableCell.setTcPr(tableCellProperties);
        }
        GridSpan gridSpan = new GridSpan();
        gridSpan.setVal(new BigInteger(String.valueOf(horizontalMergedCells)));
        tableCellProperties.setGridSpan(gridSpan);
        tableCell.setTcPr(tableCellProperties);
    }
}
Also used : TcPr(org.docx4j.wml.TcPr) BigInteger(java.math.BigInteger) GridSpan(org.docx4j.wml.TcPrInner.GridSpan)

Example 3 with GridSpan

use of org.docx4j.wml.TcPrInner.GridSpan in project docx4j-template by vindell.

the class Docx4j_合并单元格_S4_Test method mergeCellsHorizontalByGridSpan.

public void mergeCellsHorizontalByGridSpan(Tbl tbl, int row, int fromCell, int toCell) {
    if (row < 0 || fromCell < 0 || toCell < 0) {
        return;
    }
    List<Tr> trList = getTblAllTr(tbl);
    if (row > trList.size()) {
        return;
    }
    Tr tr = trList.get(row);
    List<Tc> tcList = getTrAllCell(tr);
    for (int cellIndex = Math.min(tcList.size() - 1, toCell); cellIndex >= fromCell; cellIndex--) {
        Tc tc = tcList.get(cellIndex);
        TcPr tcPr = getTcPr(tc);
        if (cellIndex == fromCell) {
            GridSpan gridSpan = tcPr.getGridSpan();
            if (gridSpan == null) {
                gridSpan = new GridSpan();
                tcPr.setGridSpan(gridSpan);
            }
            gridSpan.setVal(BigInteger.valueOf(Math.min(tcList.size() - 1, toCell) - fromCell + 1));
        } else {
            tr.getContent().remove(cellIndex);
        }
    }
}
Also used : TcPr(org.docx4j.wml.TcPr) Tr(org.docx4j.wml.Tr) Tc(org.docx4j.wml.Tc) GridSpan(org.docx4j.wml.TcPrInner.GridSpan)

Example 4 with GridSpan

use of org.docx4j.wml.TcPrInner.GridSpan in project docx4j-template by vindell.

the class Docx4j_工具类_S3_Test method mergeCellsHorizontalByGridSpan.

/*------------------------------------Word 表格相关---------------------------------------------------  */
/**
 * @Description: 跨列合并
 */
public void mergeCellsHorizontalByGridSpan(Tbl tbl, int row, int fromCell, int toCell) {
    if (row < 0 || fromCell < 0 || toCell < 0) {
        return;
    }
    List<Tr> trList = getTblAllTr(tbl);
    if (row > trList.size()) {
        return;
    }
    Tr tr = trList.get(row);
    List<Tc> tcList = getTrAllCell(tr);
    for (int cellIndex = Math.min(tcList.size() - 1, toCell); cellIndex >= fromCell; cellIndex--) {
        Tc tc = tcList.get(cellIndex);
        TcPr tcPr = getTcPr(tc);
        if (cellIndex == fromCell) {
            GridSpan gridSpan = tcPr.getGridSpan();
            if (gridSpan == null) {
                gridSpan = new GridSpan();
                tcPr.setGridSpan(gridSpan);
            }
            gridSpan.setVal(BigInteger.valueOf(Math.min(tcList.size() - 1, toCell) - fromCell + 1));
        } else {
            tr.getContent().remove(cellIndex);
        }
    }
}
Also used : TcPr(org.docx4j.wml.TcPr) Tr(org.docx4j.wml.Tr) Tc(org.docx4j.wml.Tc) GridSpan(org.docx4j.wml.TcPrInner.GridSpan)

Example 5 with GridSpan

use of org.docx4j.wml.TcPrInner.GridSpan in project TranskribusCore by Transkribus.

the class DocxBuilder method applyGridSpan.

private static void applyGridSpan(final Tc cell, final int colSpan, final String rowSpan, int w, boolean mergedVertical) {
    TcPr tcPr = factory.createTcPr();
    TblWidth tblWidth = factory.createTblWidth();
    tblWidth.setType("dxa");
    tblWidth.setW(BigInteger.valueOf(w * colSpan));
    tcPr.setTcW(tblWidth);
    if (colSpan > 1) {
        GridSpan gridSpan = factory.createTcPrInnerGridSpan();
        gridSpan.setVal(BigInteger.valueOf(colSpan));
        tcPr.setGridSpan(gridSpan);
    }
    if (mergedVertical) {
        // logger.debug(" this is vertical span");
        VMerge gridVSpan = factory.createTcPrInnerVMerge();
        if (rowSpan != null)
            gridVSpan.setVal(rowSpan);
        tcPr.setVMerge(gridVSpan);
    }
    cell.setTcPr(tcPr);
}
Also used : TblWidth(org.docx4j.wml.TblWidth) TcPr(org.docx4j.wml.TcPr) GridSpan(org.docx4j.wml.TcPrInner.GridSpan) VMerge(org.docx4j.wml.TcPrInner.VMerge)

Aggregations

TcPr (org.docx4j.wml.TcPr)9 GridSpan (org.docx4j.wml.TcPrInner.GridSpan)9 Tc (org.docx4j.wml.Tc)6 BigInteger (java.math.BigInteger)3 Tr (org.docx4j.wml.Tr)3 TblWidth (org.docx4j.wml.TblWidth)2 File (java.io.File)1 TblStyle (org.docx4j.wml.CTTblPrBase.TblStyle)1 Tbl (org.docx4j.wml.Tbl)1 TblPr (org.docx4j.wml.TblPr)1 VMerge (org.docx4j.wml.TcPrInner.VMerge)1 TrPr (org.docx4j.wml.TrPr)1