XML 中的 ODT 表样式不起作用

Posted

技术标签:

【中文标题】XML 中的 ODT 表样式不起作用【英文标题】:ODT table styles in XML not working 【发布时间】:2016-12-06 17:55:05 【问题描述】:

我正在开发一个可生成相当大的 ODT 文件的应用程序。该应用程序将 XML 写入 content.xml、styles.xml 等。我正在尝试在表格上获得一些简单的表格样式,并且在生成文件后,我可以验证这一切都是在 XML 方面通过的我希望它可以,但是当我在文字处理器中打开文件时,实际上并没有显示任何样式。我已经把它分解为只是试图让一个简单的表格显示一些样式,即使这样也根本不起作用。

在“自动样式”标签中,我有这个样式 sn-p。

    <style:style style:name="mytable" style:family="table">
        <style:properties 
            fo:background-color="#666666" 
            style: 
            fo:margin-left="4.5pt" 
            fo:margin-top="0pt" 
            fo:margin-bottom="0pt" 
            table:align="left" 
        />
    </style:style>
    <style:style style:name="mytable.A" style:family="table-column">
        <style:properties fo:background-color="#000000" style:column-/>
    </style:style>
    <style:style style:name="mytable.B" style:family="table-column">
        <style:properties style:column-/>
    </style:style>
    <style:style style:name="mytable.C" style:family="table-column">
        <style:properties style:column-/>
    </style:style>
    <style:style style:name="mytable.D" style:family="table-column">
        <style:properties style:column-/>
    </style:style>  

编辑:这是我的实时文档的屏幕截图。这是该文档中的 content.xml 部分,上面发布的样式是相同的。

    <table:table table:name="mytable" table:style-name="mytable">
        <table:table-columns>
            <table:table-column table:style-name="mytable.A"/>
            <table:table-column table:style-name="mytable.B"/>
            <table:table-column table:style-name="mytable.C"/>
            <table:table-column table:style-name="mytable.D"/>
        </table:table-columns>
        <table:table-header-rows>
            <table:table-row>
                <table:table-cell table:style-name="mytable.A1" office:value-type="string">
                    <text:p text:style-name="P39">citation</text:p>
                </table:table-cell>
                <table:table-cell table:style-name="mytable.B1" office:value-type="string">
                    <text:p text:style-name="P39">title</text:p>
                </table:table-cell>
                <table:table-cell table:style-name="mytable.C1" office:value-type="string">
                    <text:p text:style-name="P39">description</text:p>
                </table:table-cell>
                <table:table-cell table:style-name="mytable.D1" office:value-type="string">
                    <text:p p text:style-name="P38"/>
                </table:table-cell>
            </table:table-row>
        </table:table-header-rows>
        <table:table-row>
            <table:table-cell table:style-name="mytable.A2" office:value-type="string">
                <text:p p text:style-name="P39">Administrative Safe-guards</text:p>
            </table:table-cell>
            <table:table-cell table:style-name="mytable.B2" office:value-type="string">
                <text:p p text:style-name="P39"/>
            </table:table-cell>
            <table:table-cell table:style-name="mytable.C2" office:value-type="string">
                <text:p p text:style-name="P39"/>
            </table:table-cell>
            <table:table-cell table:style-name="mytable.D2" office:value-type="string">
                <text:p p text:style-name="P38"/>
            </table:table-cell>
        </table:table-row>
    </table:table>

【问题讨论】:

您能否发布一张 Writer 中表格的屏幕截图? 我在编辑中添加了截图以及 content.xml 中的实际 xml 【参考方案1】:

子节点应该是style:table-properties,而不是style:properties。 http://books.evc-cit.info/odbook/ch04.html#text-table-style-section 对此进行了解释。

<office:automatic-styles>
<style:style style:name="mytable" style:family="table">
    <style:table-properties 
        fo:background-color="#666666" 
        style: 
        fo:margin-left="4.5pt" 
        fo:margin-top="0pt" 
        fo:margin-bottom="0pt" 
        table:align="left" 
    />
</style:style>

【讨论】:

我一开始确实尝试过,但并没有解决它,我要离开 apache 的文档,在第 256 行找到 openoffice.org/xml/xml_specification.pdf 进行更改后,它对我有用,如图所示。您使用的是什么操作系统和 Office 版本?您链接的 PDF 文档是 2002 年的,所以语法可能已经过时了。 我在 Windows 上使用 Apache OpenOffice 4.1.3 对其进行了测试。 为了确定,我再次尝试更改它,但我仍然得到相同的结果。我也使用相同的版本,截图已发布在我对该问题的编辑中。 编辑的代码给了我一个错误。它多次提到text:p p,OpenOffice 拒绝了。在将它们更改为 text:p 之后,我不得不再次将标签更改为 table-properties,然后它就起作用了。

以上是关于XML 中的 ODT 表样式不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥 /**/ 注释在样式表中起作用,而 // 注释却不起作用?

从css样式表反应类样式不起作用

动态加载 css 样式表在 IE 上不起作用

剑道移动模板样式/格式不起作用

表格的边框在 IE 中不起作用

CSS/JS 在 HTML 中不起作用,错误:MIME 类型 ('text/html') 不是受支持的样式表 MIME 类型