【问题标题】:POI XWPF pagesizes via CTPageSz are off通过 CTPageSz 的 POI XWPF 页面大小已关闭
【发布时间】:2015-08-19 09:49:06
【问题描述】:

我正在尝试通过 Apache POI(带有 ooxml-schemas 1.1 的 3.12)将表插入 XWPF docx。

我正在使用

CTTblWidth oWidth = oTable.getCTTbl().getTblPr().addNewTblW();
oWidth.setType(STTblWidth.PCT);
oWidth.setW(BigInteger.valueOf(iWidth));

设置我的桌子的宽度。 通过反复试验,iWidth = 5000 似乎是一个合理的值。

我试图通过动态获取页面宽度

CTBody oBody = m_oDocx.getDocument().getBody();
if (!oBody.isSetSectPr()) oBody.addNewSectPr();
CTSectPr oSect = oBody.getSectPr();
if (!oSect.isSetPgSz()) oSect.addNewPgSz();    
CTPageSz pageSize = oSect.getPgSz();
BigInteger oPageSize.getW();

但这对于 DINA4 的返回值是 11906,距离很远。 即使通过以下方式减去边距:

oPageSize.getW().subtract(oSect.getPgMar().getRight()).subtract(oSect.getPgMar().getLeft())

我还差得很远。

谁能给我一个提示我在这里缺少什么,好吗? 谢谢

【问题讨论】:

    标签: java apache-poi docx xwpf


    【解决方案1】:

    代替

    oWidth.setType(STTblWidth.PCT);
    

    使用

    oWidth.setType(STTblWidth.DXA);
    

    STTblWidth.PCT 用于指定宽度的百分之五十。

    STTblWidth.DXA 用于指定点的二十分之一的宽度。 72 分等于一英寸。

    【讨论】:

    • 谢谢。就是这样!我仍然不明白为什么百分比计为 5000。
    • 只是猜测。你得到 5000 PCT 和 50.00% 一样吗?
    • 不,很遗憾没有。 5000 大约是默认 DinA4 页面中书写区域的宽度(2.5 厘米边距)。
    • 我已经更新了我的答案。有关 Office Open XML 中所有类型的度量单位,请参阅链接 Points, inches and Emus: Measuring units in Office Open XML
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-02
    • 2014-04-11
    • 1970-01-01
    相关资源
    最近更新 更多