layoutCollector.getStartPageIndex(paragraph) 使用这种方式获取段落所在是第几页,与实际的页码不一致,请问可能是什么原因?

layoutCollector.getStartPageIndex(paragraph) 使用这种方式获取段落所在是第几页,与实际所在的页数不一致,请问可能是什么原因?

@ouchli MS Word 文档本质上是流动的,因此不存在“页面”概念。 消费者应用程序将文档内容动态重排到页面。 Aspose.Words 也是如此,为了计算特定节点的页面索引,它构建文档布局。 为了构建准确的文档布局,文档中使用的字体必须在处理文档的环境中可用。 因此,请尝试提供所需的字体。 您可以使用 IWarningCallback 在字体被替换时获取通知:
https://reference.aspose.com/words/java/com.aspose.words/iwarningcallback/

此外,文档布局可能会受到默认编辑语言的影响。 您可以在加载文档时使用以下属性指定它:
https://reference.aspose.com/words/java/com.aspose.words/loadoptions/#getLanguagePreferences

如果经过上述操作后问题仍然存在,请附上您的输入文档并指出页码确定不正确的位置。

请问怎么在加载文档时指定默认编辑语言呢?

@ouchli 默认情况下,Aspose.Words 使用英语作为编辑语言。

文档1111.docx (82.1 KB)

您好,文档中 3.2.10 这个标题段落,应该是在第20个页上,但是解析出来是在第19页上,是为什么呢

@ouchli 我无法在我这边重现该问题。 以下代码返回 20 页码:

Document doc = new Document("C:\\Temp\\in.docx");
LayoutCollector collector = new LayoutCollector(doc);

for(Paragraph p : (Iterable<Paragraph>)doc.getChildNodes(NodeType.PARAGRAPH, true))
{
    if(p.toString(SaveFormat.TEXT).trim().equals("3.2.10"))
        System.out.println(collector.getStartPageIndex(p));
}

使用跟您一样的代码,返回的结果是19,请问这可能是什么原因呢

@ouchli 请尝试实现 IWarningCallback 以检查是否执行字体替换。 正如我所提到的,由于字体规格不同,字体替换可能会影响文档布局。 另外,请确保您使用的是最新的 24.2 版本的 Aspose.Words。

字体替换的问题已经确认过了,不存在替换字体的问题,我使用的aspose版本是23.11,这个版本也会有影响吗,您可以使用这个版本的aspose试试吗

@ouchli 是的,在 23.11 版本中,该问题可以重现。 因此请将Aspose.Words更新到最新的24.2版本。

文档222222.docx (46.3 KB)

for(Paragraph p : (Iterable<Paragraph>)document.getChildNodes(NodeType.PARAGRAPH, true))
{
    if(p.toString(SaveFormat.TEXT).trim().equals("第二页")) {
        System.out.println(collector.getStartPageIndex(p));
    }
}

这个文档中的 第二页 段落使用上述代码打印的值 为 1 ,其实应该是2 ,请问是什么原因呢?
我使用的aspose版本是 24.3 ,字体替换的问题也不存在。

@ouchli 上述段落从上一页开始,并带有分页符,如屏幕截图所示。 所以 StartPageIndex 是 1,但 EndPageIndex 是 2,如您所料。

请尝试使用以下代码:

Document doc = new Document("C:\\Temp\\in.docx");
LayoutCollector collector = new LayoutCollector(doc);

for (Paragraph p : (Iterable<Paragraph>)doc.getChildNodes(NodeType.PARAGRAPH, true))
{
    if (p.toString(SaveFormat.TEXT).trim().equals("第二页"))
    {
        System.out.println(collector.getEndPageIndex(p));
    }
}

好的,谢谢您的解答。
再请问一个问题,我们有一个文档,所有的段落,段落后间距值都为0 ,但是通过aspose解析的所有段落后间距 都为 8磅。请问这个大概是什么原因呢。由于信息安全的问题,无法给您提供示例文档。

@ouchli 不幸的是,如果没有有问题的文档,很难判断是什么原因导致了问题。 您可以从文档中删除机密信息或创建一个简单的虚拟文档,以便我们重现和分析问题。

这个文档稍微改动一个字符,检测结果就会正确,那我们再找找原因。

@ouchli MS Word 很可能在编辑后修复了文档中的某些问题。 但正如我所提到的,如果没有真正有问题的文档,很难判断问题的原因。