如何解决因为字符间距压缩、允许标点溢出边界等,导致使用 Document.updateFields 方法更新的目录页码与实际不符?

我的版本apose.words:16.4.0。当我使用字符间距压缩、允许标点溢出边界等格式时,会导致原本显示为两行的内容实际压缩到一行,如果我使用 Document.updateFields 方法来更新目录页码时,会导致更新后的页码与实际不符。
请尝试使用 Document.updateFields 方法来更新以下文件的目录,观察目录页码。

public class Test {

    public static void main(String[] args) {
        try {
            Document doc = new Document("D:/test.docx");
            doc.updateFields();
            doc.save("D:/test.docx", SaveFormat.DOCX);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

test.docx (117.7 KB)

在apose.words:16.4.0版本下,有解决这个问题的方法吗?

@whitemeen, 请查看随附的Word文档。 第一个是由Aspose.Words 16.4版本生成的,第二个是由Aspose.Words 24.1版本生成的。 看来在最新版本的 Aspose.Words 中该问题无法重现。 我建议升级到最新版本。

test.16.4.docx (100.8 KB)
test.24.1.docx (101.5 KB)

这样看来问题依然存在。因为目录中第二章的实际页码应该为1。

1.png (35.8 KB)

2.png (31.4 KB)

请用如下代码,重新生成该文件。

public class Test {

    public static void main(String[] args) {
        try {
            Document doc = new Document("D:/test.docx");
            doc.updateFields();
            doc.save("D:/test.docx", SaveFormat.DOCX);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

test.docx (120.7 KB)

@whitemeen, 正如我从您的屏幕截图中看到的,您的文档是使用不同的字体呈现的。 test.docx中指定了STKaiti字体,但我的电脑上缺少该字体,Microsoft Word用Microsoft YaHei字体替换了它。 字体差异可能是文档布局差异的原因。 下面的屏幕截图显示了 Microsoft Word 如何布局 test.docx:

请执行以下步骤来帮助分析问题:

  1. 在 Aspose.Words 中调用 updateFields() 后,将 test.docx 保存为 PDF 或 XPS 文件,并将其附加到此处。
  2. 在 Microsoft Word 中将 test.docx 另存为 PDF 或 XPS 并将其附加到此处。
  3. 附加STKaiti字体。

请查阅:

  1. Aspose.Words 生成的 PDF 文件:
    test.apose.pdf (171.8 KB)

  2. Microsoft Word 另存的 PDF 文件:
    test.microsoft.pdf (144.9 KB)

  3. STKaiti字体:
    STKAITI.zip (8.3 MB)

@whitemeen, Aspose.Words 会计算文档布局,然后才能确定目录中应包含哪些页面。 我们可以通过将Word文档转换为例如PDF格式来检查文档布局是什么。 下面您可以看到 Aspose.Words 16.4 和 Aspose.Words 24.1 生成的 PDF 文件与 Microsoft Word 生成的 PDF 文件的比较。 STKaiti 字体已安装并由 Aspose.Words 在 PDF 生成中使用。 正如您所看到的,16.4 版本生成的布局不正确,因此目录中的页码也不正确。 Aspose.Words 24.1 产生更好的结果,只有一行换行不正确。 24.1 版本生成的 PDF 中目录页码是正确的。


test.16.4.pdf (171.8 KB)
test.24.1.pdf (171.8 KB)

针对24.1版本换行不正确的问题,我们已经在我们的内部问题跟踪系统中打开了以下新工单,并将根据 免费支持政策 中提到的条款提供它们的修复:

Issue ID(s): WORDSNET-26430

如果您需要优先支持以及直接联系我们的付费支持管理团队,您可以获得 付费支持服务

感谢解答。

因为我发现,当我把文档段落的所有中文板式取消勾选后,Apose 的布局格式就与 Microsoft Word 是一致的。如下图所示:

cn.layout.png (108.8 KB)

我想再请教一下,Aspose.Words.Layout 命名空间中有相当丰富的一些类来控制文档布局,我是否可以利用这些类手动将 Apose 的文档布局设置成与 Microsoft Word 的布局一致?如果可行的话能否提供一些示例代码。

@whitemeen, 目前 Aspose.Words API 中提供以下属性:

  1. ParagraphFormat.FarEastLineBreakControl
  2. ParagraphFormat.WordWrap
  3. ParagraphFormat.HangingPunctuation
  4. ParagraphFormat.AddSpaceBetweenFarEastAndAlpha
  5. ParagraphFormat.AddSpaceBetweenFarEastAndDigit

关于中文布局,Aspose.Words 在字符间距控制功能方面存在问题。 Microsoft Word 对此功能的实现没有记录,但该功能的工作正在进行中,并且将会有所改进。 屏幕截图中显示的其他与中文相关的功能是在 Aspose.Words 中实现的。

所以目前Aspose.Words在某些情况下可以对带有中文文本和中文特征的文档进行排版,但在某些情况下会出现差异。 我们不断改进 Aspose.Words,有关问题的客户报告帮助我们使 Aspose.Words 变得更好。