0

我一直在尝试创建表格并使它们在其底部边框和表格之后的任何内容(通常是文本)之间留出一些空间。

据我爬过ooxml规范,我知道我需要将这个元素链添加到表中tblPr(表属性)-> tblpPr(表位置属性),并将属性bottomFromText设置为我想要的特定数量空间表格和下一个元素,还有 vertAnchor 属性(现在我正在使用“text”值配置它),最后是 tblpY 属性。

我正在做的一个 q&d 片段是这样的(java 和 apache poi):

XWPFTable table = document.createTable();
CTTblPr _cttblpr = table.getCTTbl().addNewTblPr();

_cttblpr.addNewTblpPr().setBottomFromText(BigInteger.valueOf(284));
_cttblpr.getTblpPr().setVertAnchor(STVAnchor.TEXT);
_cttblpr.getTblpPr().setTblpY(BigInteger.valueOf(1));

我的主要参考是这个。此外,我一直在创建(使用 LibreOffice writer 和 Microsoft Office 2007)简单的文档,其中只有一个表格和我想要的空间,并提取其中的文件(特别是 word/document.xml)以查看它。到目前为止,我为实现这一目标所做的所有努力都没有成功。

你知道这里有什么问题吗?我坚信我有误解......

先感谢您。

4

1 回答 1

1

没错,您需要w:bottomFromText,例如:

            <w:tbl>
                <w:tblPr>
                    <w:tblpPr w:leftFromText="187" w:rightFromText="187" w:bottomFromText="4320" w:vertAnchor="text" w:tblpY="1"/>
                    <w:tblOverlap w:val="never"/>
                </w:tblPr>

基于以上所述,您的代码看起来是合理的。

作为比较,如果您使用docx4j进行操作,您可以通过以下两种方式之一创建它。

第一种方法是显式使用 JAXB 对象工厂:

org.docx4j.wml.ObjectFactory wmlObjectFactory = new org.docx4j.wml.ObjectFactory();

Tbl tbl = wmlObjectFactory.createTbl(); 
JAXBElement<org.docx4j.wml.Tbl> tblWrapped = wmlObjectFactory.createBodyTbl(tbl); 
    // Create object for tblPr
    TblPr tblpr = wmlObjectFactory.createTblPr(); 
    tbl.setTblPr(tblpr); 
        // Create object for tblpPr
        CTTblPPr tblppr = wmlObjectFactory.createCTTblPPr(); 
        tblpr.setTblpPr(tblppr); 
            tblppr.setLeftFromText( BigInteger.valueOf( 187) ); 
            tblppr.setRightFromText( BigInteger.valueOf( 187) ); 
            tblppr.setBottomFromText( BigInteger.valueOf( 4320) ); 
            tblppr.setVertAnchor(org.docx4j.wml.STVAnchor.TEXT);
            tblppr.setTblpY( BigInteger.valueOf( 1) ); 
        // Create object for tblOverlap
        CTTblOverlap tbloverlap = wmlObjectFactory.createCTTblOverlap(); 
        tblpr.setTblOverlap(tbloverlap); 
            tbloverlap.setVal(org.docx4j.wml.STTblOverlap.NEVER);

第二个是解组一个字符串:

    String openXML = "<w:tbl xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\">
                      + "<w:tblPr>
                            + "<w:tblpPr w:bottomFromText=\"4320\" w:leftFromText=\"187\" w:rightFromText=\"187\" w:tblpY=\"1\" w:vertAnchor=\"text\"/>"
                                + "<w:tblOverlap w:val=\"never\"/>"
                          +"</w:tblPr>"
etc    
                +"</w:tbl>";
    Tbl tbl = (Tbl)XmlUtils.unmarshalString(openXML);
于 2013-05-28T21:03:43.710 回答