解析ppt时,某些paragraph有样式,但是无法获取到

IPortionCollection portions = paragraph.getPortions();
for (IPortion iPortion: portions) {
    System.out.println(iPortion.getPortionFormat().getFontBold());
}

使用这种方式无法获取到bold,返回的全是-1,不知道该如何能获取到是否加粗
1735107759377.png (4.7 KB)

1735107802246.png (27.7 KB)

@maochen

在解析PPT时,如果您无法获取某些段落的加粗样式,可能是因为您没有正确设置或访问段落的格式属性。根据您的代码示例,您正在尝试通过 IPortionCollection 获取每个部分的格式,但返回的值为-1,表示未设置加粗。

要确保能够正确获取加粗状态,您可以尝试以下步骤:

  1. 确保段落中有设置加粗的部分:在添加文本时,确保您已经为某些部分设置了加粗属性。例如,您可以在创建 IPortion 对象时直接设置其格式。

  2. 检查段落的格式:在访问每个部分之前,确保段落本身的格式没有覆盖部分的格式设置。

  3. 示例代码:以下是一个示例代码,展示如何设置和获取段落中部分的加粗状态:

Presentation presentation = new Presentation("your_presentation.pptx");
ISlide slide = presentation.getSlides().get_Item(0);
ITextFrame textFrame = ((IAutoShape) slide.getShapes().get_Item(0)).getTextFrame();
IParagraph paragraph = textFrame.getParagraphs().get_Item(0);

// 创建并设置部分
IPortion portion = new Portion("Hello World");
portion.getPortionFormat().setFontBold(NullableBool.True); // 设置为加粗
paragraph.getPortions().add(portion);

// 获取并打印加粗状态
for (IPortion iPortion : paragraph.getPortions()) {
    System.out.println(iPortion.getPortionFormat().getFontBold());
}

在这个示例中,我们创建了一个新的部分并将其设置为加粗,然后在循环中打印每个部分的加粗状态。确保在您的代码中也遵循类似的逻辑。

如果您仍然遇到问题,请检查您的PPT文件,确保段落确实包含加粗的部分,并且没有其他格式设置覆盖了这些属性。

@maochen,
PowerPoint 演示文稿中的许多文本样式属性是从父元素继承的。要获取最终样式,您需要使用 getEffective 方法。

将以下代码行

System.out.println(iPortion.getPortionFormat().getFontBold());

替换为

System.out.println(iPortion.getPortionFormat().getEffective().getFontBold());

这应该会有所帮助。

更多详情:Shape Effective Properties|Aspose.Slides Documentation

是的,我用的aspose版本19.7,没有getEffective这个方法,刚才测试使用iPortion.createPortionFormatEffective().getFontBold()可以获取到,应该也可以吧

@maochen,
是的,很可能这是一个类似的方法,应该可以帮助您解决问题。