您好,请问如何获取文档的总页数,使用document.getPageCount方法获取到的页数不正确

您好,请问如何获取文档的总页数,使用document.getPageCount方法获取到的页数不正确

@ouchli 出现该问题的原因很可能是文档使用的字体在处理文档的环境中不可用。 为了构建准确的文档布局,需要字体。 如果 Aspose.Words 找不到文档中使用的字体,则字体被替换。 由于字体规格的差异,这可能会导致布局差异,从而导致 Aspose.Words 返回不正确的页数。 您可以实现 IWarningCallback 以在执行字体替换时收到通知。
以下文章可能对您有用:
https://docs.aspose.com/words/java/specify-truetype-fonts-location/
https://docs.aspose.com/words/java/install-truetype-fonts-on-linux/
请尝试安装或提供渲染文档所需的字体。 这应该可以解决问题。 如果没有,请在此处附上您的输入和输出文档以及有问题的字体进行测试,我们将再次检查问题并为您提供更多信息。

能不能给一个获取文档总页数的代码示例

@ouchli 您可以使用以下代码:

Document doc = new Document("C:\\Temp\\in.docx");
System.out.println(doc.getPageCount());

谢谢,还有一个问题,如果我想要获取某个标题的所有内容该如何获取,能不能给一个代码示例

@ouchli 如果您需要提取标题段落之间的内容,可以使用以下文章中描述的方法:
https://docs.aspose.com/words/python-net/how-to-extract-selected-content-between-nodes-in-a-document/#extract-content-between-paragraphs

你好,如何获取到正则表达式匹配的所有文本呢,目前doc.getRange().replace(Pattern.compile(“[s|m]ad”), “bad”, options);这个方法只能进行替换,无法确定匹配的是哪些文本

@ouchli 您可以使用 IReplacingCallback 来实现此目的。

你好,我现在要根据正则匹配文档中从第一个标题开始往后的所有内容中所有匹配的文本,不需要匹配封面或者目录,请问如何截取标题的所有内容,并将其重新构造成一个新的文本呢

@ouchli 不幸的是,你的要求还不够明确。 恐怕中文不是我的语言之一,翻译人员无法正确翻译您的要求。 因此,请提供您的输入和预期输出,以便更好地了解您的需求。

你好,请问当前节点为表格的一个单元格,如何获取这个单元格所在表格对象

@ouchli 您可以使用以下简单代码来获取指定类型的节点的祖先:

Table table = (Table)node.getAncestor(NodeType.TABLE);

好的,谢谢
再问一个问题:
我通过API提供的提取节点之间的内容的方法,获取到了一个标题下的所有节点,然后通过判断这个节点是否是段落,将其强转成段落对象,最后给这个段落加批注,但是加不上批注,请问是什么原因?
以下是我的代码

extracted_nodes = helper.ExtractContentHelper.extract_content(start_para, end_table, false)

首先通过上述代码提取标题的内容,start_para传入标题1,end_table传入与标题1级别相同的标题2

if (!CollectionUtils.isEmpty(nodeList))
{
    List<Node> nodes = nodeList.stream().filter(node->node.getNodeType() == NodeType.PARAGRAPH).collect(Collectors.toList());
    if (nodes.size() == DocConstants.NUM_1)
    {
        Paragraph paragraphNode = ((Paragraph)nodes.get(DocConstants.NUM_0));
        paragraphLocationBoList.add(DocParagraphLocationBo.builder().paragraph(paragraphNode)
                .commentText(headingVo.getHeadingLabel() + "章节内容仅有\"" + "\"字样,需内容完整").build());
    }
}

然后通过上述代码将node节点强转成Paragraph对象,并调用加段落批注方法加批注

public static void addCommentForParagraph(AddCommentParagraphDto paragraphDto, Document document)
{
    Paragraph para = paragraphDto.getParagraph();
    if (Objects.isNull(para))
    {
        para = getParagraph(paragraphDto, document);
    }
    int length = para.getRuns().toArray().length;
    Run cmtAnchorRun = para.getRuns().get(length - 1);
    Run run = para.getRuns().get(WxcmConst.NUM_0);
    Comment comment = new Comment(document, paragraphDto.getAuth(), "", new Date());
    comment.setText(paragraphDto.getCommentText());
    para.appendChild(comment);
    para.insertBefore(new CommentRangeStart(document, comment.getId()), cmtAnchorRun);
    para.insertAfter(new CommentRangeEnd(document, comment.getId()), run);
}

也就是说,我只传了段落对象,并没有传section和body

@ouchli 如果需要用注释范围包裹整个段落,请修改您的代码,如下所示:

public static void addCommentForParagraph(AddCommentParagraphDto paragraphDto, Document document)
{
    Paragraph para = paragraphDto.getParagraph();
    if (Objects.isNull(para))
    {
        para = getParagraph(paragraphDto, document);
    }
    Comment comment = new Comment(document, paragraphDto.getAuth(), "", new Date());
    comment.setText(paragraphDto.getCommentText());
    para.appendChild(comment);
    para.prependChild(new CommentRangeStart(document, comment.getId()));
    para.appendChild(new CommentRangeEnd(document, comment.getId()));
}

我通过extracted_nodes = helper.ExtractContentHelper.extract_content(start_para, end_table, false)方法获取到的paragraph节点加不上批注,但使用其他方式获取到的paragraph可以加上批注

@ouchli ExtractContentHelper.extract_content 方法不返回原始文档中的节点,而是返回这些节点的克隆。 因此,对 ExtractContentHelper.extract_content 方法返回的节点所做的更改不会影响原始文档中的节点。

你好,请问如何获取Font对象里面的文本内容

@ouchli 您可以使用 Run.Font 属性将字体应用于 RUN 节点。 根据内容的不同,一个 RUN 可以应用不同的字体:

你好,请问如何获取文档页眉页脚的设置属性,比如如何获取页眉是否设置了首页不同或者奇偶页不同

@ouchli 您可以使用 PageSetup.DifferentFirstPageHeaderFooterPageSetup.OddAndEvenPagesHeaderFooter