用了很多种办法都无法获取准确的页数,是为什么呀

try
{
    LoadOptions loadOptions = new LoadOptions();
    loadOptions.getLanguagePreferences().setDefaultEditingLanguage(EditingLanguage.CHINESE_PRC);
    Document flc = new Document(fileUrl + "//temp//" + reportFileTempName + "_FLC.docx", loadOptions);

    System.out.println("flc.getBuiltInDocumentProperties().getPages() = " + flc.getBuiltInDocumentProperties().getPages());
    System.out.println("flc.getPageCount() = " + flc.getPageCount());
    Bookmark bookmark = doc.getRange().getBookmarks().get("附录C");
    if (bookmark != null)
    {
        Node parentNode = bookmark.getBookmarkStart().getParentNode();
        insertDocument(parentNode, flc);
        // 删除书签
        parentNode.remove();
    }
}
catch (FileNotFoundException e)
{
    e.printStackTrace();
}

51f71061-b105-480a-ad3e-ae178ebd6081_FLC.docx (37.2 KB)

@junping_huang 您的文档中使用的以下字体在我这边不可用:

  • ‘华文仿宋’

您可以将其附在此处进行测试吗?

出现该问题很可能是因为文档中使用的字体在处理文档的环境中不可用。 如果 Aspose.Words 找不到文档中使用的字体,则字体被替换。 由于字体规格的差异,这可能会导致布局差异,并导致页面检测不正确。 您可以实现 IWarningCallback 以在执行字体替换时收到通知。
以下文章可能对您有用:
https://docs.aspose.com/words/java/specify-truetype-fonts-location/
https://docs.aspose.com/words/java/install-truetype-fonts-on-linux/

实现 IWarningCallback 以在执行字体替换时收到通知,这里能给个DEMO嘛

@junping_huang 在您的情况下,您需要使用兼容性选项来获得与 MS Word 相同的结果。转换后的页数与 PDF 文档中的页数相同。以下代码可以帮助您获得正确的结果:

LoadOptions loadOptions = new LoadOptions();
loadOptions.getLanguagePreferences().setDefaultEditingLanguage(EditingLanguage.CHINESE_PRC);
Document doc = new Document("input.docx", loadOptions);

doc.getCompatibilityOptions().setAdjustLineHeightInTable(false);
System.out.println("doc.getPageCount() = " + doc.getPageCount());

如果要使用 System.out.println("flc.getBuiltInDocumentProperties().getPages() = flc.getBuiltInDocumentProperties().getPages());,需要先使用 doc.updatePageLayout();。但我认为 doc.getPageCount() 已经足够了。

如果你需要了解一些遗漏的字体,你可以使用:

FontWarnings fontWarnings = new FontWarnings();
doc.setWarningCallback(fontWarnings);

public static class FontWarnings implements IWarningCallback {
    ///
    /// Called every time a warning occurs during loading/saving.
    ///
    public void warning(WarningInfo info) {
        if (info.getWarningType() == WarningType.FONT_SUBSTITUTION)
            System.out.println(info.getDescription());
    }
}

public static class FontWarnings implements IWarningCallback {
///
/// Called every time a warning occurs during loading/saving.
///
@Override
public void warning(WarningInfo warningInfo) {
if (warningInfo.getWarningType() == WarningType.FONT_SUBSTITUTION)
System.out.println(warningInfo.getDescription());
}
}
我发现并没有字体转换,还有其他原因导致页码不准确嘛

@junping_huang 您尝试过提供的解决方案中的兼容性选项吗?

现在确定了问题点,是因为(多行表头+表头合并+跨页标题行固定)导致的,我现在使用的版本是aspose19.5,请问哪个版本解决了这个问题

@junping_huang 我用最新的 24.9 版进行了检查。

好的非常感谢,我再去验证一下

1 Like