word生成问题总结
1、word中表格的列宽如何设置和得知
XWPFTable table = doc.createTable();
table.getCTTbl().getTblPr().addNewTblLayout().setType(STTblLayoutType.FIXED);
table.setWidth(“100%”);
table.setTableAlignment(TableRowAlign.CENTER);
table.setCellMargins(Units.pointsToMaster(180 * 0.02), Units.pointsToMaster(180 * 0.02),
Units.pointsToMaster(180 * 0.02), Units.pointsToMaster(180 * 0.02));
CTTblGrid tablegrid = table.getCTTbl().addNewTblGrid();
tablegrid.addNewGridCol().setW(Units.pointsToMaster(180 * 0.3));
tablegrid.addNewGridCol().setW(Units.pointsToMaster(180 * 0.3));
tablegrid.addNewGridCol().setW(Units.pointsToMaster(180 * 0.6));
tablegrid.addNewGridCol().setW(Units.pointsToMaster(180 * 0.5));
tablegrid.addNewGridCol().setW(Units.pointsToMaster(180 * 0.5));
tablegrid.addNewGridCol().setW(Units.pointsToMaster(180 * 0.5));
这段代码设置了表格的列宽,180*0.3的单位是磅,印刷行业标准单位,1磅 ≈ 1/72英寸 ≈ 0.3527毫米。
但使用poi word设置列宽时需要转换为单位缇,这是因为Word文档的底层XML(OOXML)中,列宽、行高、图片尺寸等均以缇为单位存储,Units.pointsToMaster即可完成转换。
但是生成的word表格的列宽并不一定会和设置相同,实际上它会设置页宽的影响,表格的列宽最终会按照(页宽-页变距)*表格列宽占总列宽的比例,所以上面代码实际上设置的是各列宽占表格总宽度的比例,实际大小和页宽有关。
2、poi word中生成图片的单位是EMU,需要将缇转换为EMU单位(1 twip = 635 EMU)