如何使用最新 Apache POI 5.2.2 的 Low Level CTRPr & CTPPr 类

How to use Low Level CTRPr & CTPPr Classes of latest Apache POI 5.2.2

我正在从 POI 3.14 升级到最新的 POI 5.2.2。目前我在需要更新的 Apace POI 3.14 中使用下面提到的低级别 classes。

i)CTRPr - set/get 运行 粗体、斜体等属性。由 API 的 getBold(), getI()等等。在 POI 3.14 中,但似乎 API 到 set/get 粗体、斜体被更改为处理值列表,如 getBList(),最新 POI 5.2.2 中的 getIList()、setBArray(..)、setIArray(..) 等。任何 运行 在单词 xml 中只有 1 个 RPr & 所以 API 之类的 getBold() 应该足够了。 为什么最新 API 正在使用值列表?如何在代码中使用这些最新的 API 并设置各种 运行 道具?

ii)CTPPr - set/get 内联参数、列表等的参数级 Props。使用 CTLvl level.getPpr() returns CTPpr Class 在 POI 3.14 中,但 CTLvl level.getPpr() returns CTPPrGeneral class 在 POI 5.2.2 中 尽管所有 ParaProps 仍然存在于 CTPpr class 但 为什么返回 CTPPrGeneral class 而不是 CTPpr ?它有什么用?如何在代码中使用最新的 API 并设置各种 Para 道具?

任何包含详细信息的答案都会非常有帮助。

Office Open XML-schemas classes 是从 XSD 文件生成的,这些文件在 Apache 的 ECMA-376. They are contained in download part 4. The XSDs contain definitions for the XML which gets used in Office Open XML. XMLBeans 中发布,提供了 auto-generate [=17= 的方法] class 来自这个 XSDs。因此 low-level Office Open XML-schemas classes of ooxml-schemas or poi-ooxml-lite or poi-ooxml-full do fully translate the given XSD definitions to Java.

因此,对于您关于此 Office Open XML-schemas classes 的变化原因的问题的一般答案是,已发布的 XSDs 从 2006 年的第一版开始发生了变化到 2012 年的第 4 版。或者使用的 XMLBeans 版本发生了变化并且 XSD - Java - 翻译有点不同。

CTRPr - set/get-methods - 一个元素与列表

wml.xsd 的第一版中,CT_RPr 被定义为 EG_RPrContent 的序列,其中 EG_RPrContentEG_RPrBase 的序列 minOccurs="0".这意味着 EG_RPrBase 不必发生但可以发生。 EG_RPrBase 然后包含所有可能的 运行 属性的定义。这被解释为 CT_RPr 可能具有 none 或 EG_RPrBase once 的每个可能的 运行 属性。

现在在 wml.xsd 的第 4 版中,CT_RPr 的定义如上,但 EG_RPrContentEG_RPrBase 的序列,具有 minOccurs="0" maxOccurs="unbounded"。这意味着 EG_RPrBase 不必发生但可以发生,如果发生,则一次或 多次 次。这只能解释为 CT_RPr 可能具有 none 或 EG_RPrBase 的每个可能的 运行 属性,甚至 多次 .这就是现在列表的原因。

CTLvl.getPpr() returns CTPpr 对比 CTPPrGeneral class

wml.xsd 的第 1 版中,CT_Lvl 元素被定义为具有以下 sub-element:

<xsd:element name="pPr" type="CT_PPr" minOccurs="0">
  <xsd:annotation>
    <xsd:documentation>Numbering Level Associated Paragraph Properties</xsd:documentation>
  </xsd:annotation>
</xsd:element>

甚至没有 CT_PPrGeneral 的定义。所以CTLvl.getPpr()必须returnCTPpr.

现在在 wml.xsd 的第 4 版中,CT_Lvl 元素被定义为具有以下 sub-element:

<xsd:element name="pPr" type="CT_PPrGeneral" minOccurs="0"/>

所以CTLvl.getPpr()现在必须returnCTPPrGeneral。但是 CTPPrGeneral 提供了 CTPpr 也有的大多数可能性,因为 CT_PPrGeneral 提供了 CT_Ppr 也提供的大多数可能性,除了 CT_ParaRPrCT_SectPr.

并且由于wml.xsd的第4版也仍然定义了CT_Ppr元素,Java中也需要CTPpr。所以 CTPPrGeneral 不会替换 Java 中的 CTPpr 因为 CT_PPrGeneral 也不会替换 XSD.

中的 CT_Ppr