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 我无法在我这边重现该问题。 以下代码返回 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));
}
@ouchli 请尝试实现 IWarningCallback 以检查是否执行字体替换。 正如我所提到的,由于字体规格不同,字体替换可能会影响文档布局。 另外,请确保您使用的是最新的 24.2 版本的 Aspose.Words。
字体替换的问题已经确认过了,不存在替换字体的问题,我使用的aspose版本是23.11,这个版本也会有影响吗,您可以使用这个版本的aspose试试吗
文档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磅。请问这个大概是什么原因呢。由于信息安全的问题,无法给您提供示例文档。
这个文档稍微改动一个字符,检测结果就会正确,那我们再找找原因。