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);
}
}
}
}
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;
}
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);
}
}
}
}
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);
}
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());
}
}
Aggregations