Search in sources :

Example 16 with Tbl

use of org.docx4j.wml.Tbl in project TranskribusCore by Transkribus.

the class DocxBuilder method writeDocxForTranscriptWithTables.

private static void writeDocxForTranscriptWithTables(MainDocumentPart mdp, TrpPageType trpPage, boolean wordBased, boolean preserveLineBreaks) {
    boolean rtl = false;
    // TrpTableRegionType is contained in the regions too
    List<TrpRegionType> regions = trpPage.getRegions();
    Collections.sort(regions, new TrpElementReadingOrderComparator<RegionType>(true));
    for (int j = 0; j < regions.size(); ++j) {
        TrpRegionType r = regions.get(j);
        if (r instanceof TrpTableRegionType) {
            logger.debug("is table");
            TrpTableRegionType table = (TrpTableRegionType) r;
            int cols = table.getNCols();
            int rows = table.getNRows();
            // PageXmlUtils.buildPolygon(table.getCoords().getPoints()).getBounds().getMaxX();
            double maxX = table.getBoundingBox().getMaxX();
            // PageXmlUtils.buildPolygon(table.getCoords().getPoints()).getBounds().getMinX();
            double minX = table.getBoundingBox().getMinX();
            int tablesize = (int) (maxX - minX);
            List<List<TrpTableCellType>> allRowCells = new ArrayList<List<TrpTableCellType>>();
            for (int k = 0; k < rows; k++) {
                allRowCells.add(table.getRowCells(k));
            }
            List<HashMap<Integer, TrpTableCellType>> allRows = new ArrayList<HashMap<Integer, TrpTableCellType>>();
            HashMap<Integer, TrpTableCellType> nextRowMap = new HashMap<Integer, TrpTableCellType>();
            for (List<TrpTableCellType> rowCells : allRowCells) {
                HashMap<Integer, TrpTableCellType> currRowMap = new HashMap<Integer, TrpTableCellType>();
                /*
	            	 * fill up all cells which are not set in TRP (needed for vertical cell merge)
	            	 * the nextRowMap contains already all cells which span vertically with the cells above - means they got merged 
	            	 * in the table but have to be considered here 
	            	 */
                currRowMap.putAll(nextRowMap);
                nextRowMap.clear();
                for (TrpTableCellType cell : rowCells) {
                    // logger.debug("table cell text " + cell.getUnicodeTextFromLines());
                    currRowMap.put(cell.getCol(), cell);
                    if (cell.getRowSpan() > 1) {
                        nextRowMap.put(cell.getCol(), null);
                    }
                }
                allRows.add(currRowMap);
            }
            Tbl thisTable;
            try {
                thisTable = getDocxTable(wordMLPackage, wordBased, rows, cols, allRows, tablesize, mdp);
                mdp.addObject(thisTable);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            // this Br element is used break the current and go for next line
            Br br = factory.createBr();
            org.docx4j.wml.P p = factory.createP();
            mdp.addObject(p);
            p.getContent().add(br);
        } else if (r instanceof TrpTextRegionType) {
            TrpTextRegionType tr = (TrpTextRegionType) r;
            /*
				 * create one paragraph for each text region
				 * but only if there is some text in it
				 */
            String helper = tr.getUnicodeText().replaceAll("\n", "");
            if (!helper.equals("")) {
                exportTextRegion(tr, wordBased, null, mdp);
            }
        }
    }
}
Also used : TrpTextRegionType(eu.transkribus.core.model.beans.pagecontent_trp.TrpTextRegionType) TrpRegionType(eu.transkribus.core.model.beans.pagecontent_trp.TrpRegionType) TrpTableRegionType(eu.transkribus.core.model.beans.pagecontent_trp.TrpTableRegionType) RegionType(eu.transkribus.core.model.beans.pagecontent.RegionType) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) ArrayList(java.util.ArrayList) TrpTableRegionType(eu.transkribus.core.model.beans.pagecontent_trp.TrpTableRegionType) TrpRegionType(eu.transkribus.core.model.beans.pagecontent_trp.TrpRegionType) CustomTagList(eu.transkribus.core.model.beans.customtags.CustomTagList) List(java.util.List) ArrayList(java.util.ArrayList) Tbl(org.docx4j.wml.Tbl) P(org.docx4j.wml.P) TrpTableCellType(eu.transkribus.core.model.beans.pagecontent_trp.TrpTableCellType) JAXBException(javax.xml.bind.JAXBException) IOException(java.io.IOException) Docx4JException(org.docx4j.openpackaging.exceptions.Docx4JException) BigInteger(java.math.BigInteger) Br(org.docx4j.wml.Br) TrpTextRegionType(eu.transkribus.core.model.beans.pagecontent_trp.TrpTextRegionType)

Example 17 with Tbl

use of org.docx4j.wml.Tbl in project mdw-designer by CenturyLinkCloud.

the class DocxBuilder method addTable.

public Tbl addTable(String[] headers, String[][] values, int fontSize, int indent) {
    ObjectFactory factory = Context.getWmlObjectFactory();
    int writableWidthTwips = wordMLPackage.getDocumentModel().getSections().get(0).getPageDimensions().getWritableWidthTwips();
    int cols = headers.length;
    int cellWidthTwips = new Double(Math.floor((writableWidthTwips / cols))).intValue();
    Tbl tbl = TblFactory.createTable(0, cols, cellWidthTwips);
    Tr thead = factory.createTr();
    for (int i = 0; i < headers.length; i++) {
        Tc tc = factory.createTc();
        tc.getContent().add(createParagraph(headers[i], fontSize, true));
        thead.getContent().add(tc);
    }
    tbl.getContent().add(0, thead);
    for (int i = 0; i < values[0].length; i++) {
        Tr tr = factory.createTr();
        for (int j = 0; j < headers.length; j++) {
            Tc tc = factory.createTc();
            tc.getContent().add(createParagraph(values[j][i], fontSize, false));
            tr.getContent().add(tc);
        }
        tbl.getContent().add(i + 1, tr);
    }
    getMdp().addObject(tbl);
    if (indent != 0) {
        TblPr tblPr = tbl.getTblPr();
        TblWidth tblIndent = factory.createTblWidth();
        tblIndent.setType("dxa");
        tblIndent.setW(BigInteger.valueOf(indent));
        tblPr.setTblInd(tblIndent);
    }
    return tbl;
}
Also used : ObjectFactory(org.docx4j.wml.ObjectFactory) TblWidth(org.docx4j.wml.TblWidth) TblPr(org.docx4j.wml.TblPr) Tr(org.docx4j.wml.Tr) Tbl(org.docx4j.wml.Tbl) Tc(org.docx4j.wml.Tc)

Example 18 with Tbl

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

the class ContainerParseTest method testParagraphInTableCellLayout.

@Test
public void testParagraphInTableCellLayout() throws Exception {
    String html = "<table><tbody><tr>" + "<td><img src='" + PNG_IMAGE_DATA + "' height='16' width='19'/><img src='" + PNG_IMAGE_DATA + "' height='16' width='19'/>" + "<p><img src='" + PNG_IMAGE_DATA + "' height='16' width='19'/><img src='" + PNG_IMAGE_DATA + "' height='16' width='19'/></p>" + "<img src='" + PNG_IMAGE_DATA + "' height='16' width='19'/><img src='" + PNG_IMAGE_DATA + "' height='16' width='19'/></td></tr></tbody></table>";
    List<Object> tConvert = convert(html);
    Assert.assertTrue(tConvert.size() == 1);
    for (Object t : tConvert) {
        Assert.assertTrue(t instanceof Tbl);
        Tbl table = (Tbl) t;
        List<Object> convert = ((Tc) ((Tr) table.getContent().get(0)).getContent().get(0)).getContent();
        Assert.assertTrue(convert.size() == 3);
        for (Object o : convert) {
            Assert.assertTrue(o instanceof P);
            P paragraph = (P) o;
            List<Object> content = paragraph.getContent();
            Assert.assertTrue(content.size() == 2);
            for (Object child : content) {
                Assert.assertTrue(child instanceof R);
                R run = ((R) child);
                List<Object> rContent = run.getContent();
                Assert.assertTrue(rContent.size() == 1);
                Assert.assertTrue(rContent.get(0) instanceof Drawing);
            }
        }
    }
}
Also used : P(org.docx4j.wml.P) Drawing(org.docx4j.wml.Drawing) R(org.docx4j.wml.R) Tr(org.docx4j.wml.Tr) Tbl(org.docx4j.wml.Tbl) Tc(org.docx4j.wml.Tc) Test(org.junit.Test)

Example 19 with Tbl

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

the class TableBordersTest method testTableBorderPresence.

@Test
public void testTableBorderPresence() throws Docx4JException {
    Tbl tbl = table("<table border='1'><tr><th>1</th></tr></table>");
    TblBorders borders = tbl.getTblPr().getTblBorders();
    assertEquals(STBorder.INSET, borders.getTop().getVal());
    assertEquals(STBorder.INSET, borders.getBottom().getVal());
    assertEquals(STBorder.INSET, borders.getLeft().getVal());
    assertEquals(STBorder.INSET, borders.getRight().getVal());
    assertEquals(STBorder.NONE, borders.getInsideH().getVal());
    assertEquals(STBorder.NONE, borders.getInsideV().getVal());
    assertTrue(borders.getTop().getSz().longValue() > 0);
    assertTrue(borders.getBottom().getSz().longValue() > 0);
    assertTrue(borders.getLeft().getSz().longValue() > 0);
    assertTrue(borders.getRight().getSz().longValue() > 0);
    TcPrInner.TcBorders borders2 = ((Tc) ((Tr) tbl.getContent().get(0)).getContent().get(0)).getTcPr().getTcBorders();
    assertEquals(STBorder.OUTSET, borders2.getTop().getVal());
    assertEquals(STBorder.OUTSET, borders2.getBottom().getVal());
    assertEquals(STBorder.OUTSET, borders2.getLeft().getVal());
    assertEquals(STBorder.OUTSET, borders2.getRight().getVal());
    assertNull(borders2.getInsideH());
    assertNull(borders2.getInsideV());
    assertTrue(borders2.getTop().getSz().longValue() > 0);
    assertTrue(borders2.getBottom().getSz().longValue() > 0);
    assertTrue(borders2.getLeft().getSz().longValue() > 0);
    assertTrue(borders2.getRight().getSz().longValue() > 0);
}
Also used : TcPrInner(org.docx4j.wml.TcPrInner) TblBorders(org.docx4j.wml.TblBorders) Tbl(org.docx4j.wml.Tbl) Test(org.junit.Test)

Example 20 with Tbl

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

the class TableBordersTest method testTableBorderStyles.

@Test
public void testTableBorderStyles() throws Docx4JException {
    HashMap<String, STBorder> styles = new HashMap<String, STBorder>();
    styles.put("none", STBorder.NONE);
    styles.put("hidden", STBorder.NONE);
    styles.put("solid", STBorder.SINGLE);
    styles.put("dotted", STBorder.DOTTED);
    styles.put("dashed", STBorder.DASHED);
    styles.put("double", STBorder.DOUBLE);
    styles.put("inset", STBorder.INSET);
    styles.put("outset", STBorder.OUTSET);
    // no direct substitution
    styles.put("groove", STBorder.SINGLE);
    // no direct substitution
    styles.put("ridge", STBorder.SINGLE);
    styles.put("anyOther", STBorder.NONE);
    for (String style : styles.keySet()) {
        Tbl tbl = table("<table style='border: 1px " + style + " black;'><tr><td>1</td></tr></table>");
        TblBorders borders = tbl.getTblPr().getTblBorders();
        assertEquals(styles.get(style), borders.getTop().getVal());
    }
}
Also used : STBorder(org.docx4j.wml.STBorder) HashMap(java.util.HashMap) TblBorders(org.docx4j.wml.TblBorders) Tbl(org.docx4j.wml.Tbl) Test(org.junit.Test)

Aggregations

Tbl (org.docx4j.wml.Tbl)36 Tr (org.docx4j.wml.Tr)23 P (org.docx4j.wml.P)10 Tc (org.docx4j.wml.Tc)9 Test (org.junit.Test)8 File (java.io.File)7 TblPr (org.docx4j.wml.TblPr)7 RPr (org.docx4j.wml.RPr)6 TblBorders (org.docx4j.wml.TblBorders)6 BigInteger (java.math.BigInteger)5 WordprocessingMLPackage (org.docx4j.openpackaging.packages.WordprocessingMLPackage)5 MainDocumentPart (org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart)5 R (org.docx4j.wml.R)5 TblWidth (org.docx4j.wml.TblWidth)5 TblStyle (org.docx4j.wml.CTTblPrBase.TblStyle)4 ObjectFactory (org.docx4j.wml.ObjectFactory)4 STHint (org.docx4j.wml.STHint)4 Text (org.docx4j.wml.Text)4 ArrayList (java.util.ArrayList)3 TrpTableCellType (eu.transkribus.core.model.beans.pagecontent_trp.TrpTableCellType)2