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)