Aspose.Words for .NET で目次のページ番号が更新されない

以下のコードで目次を更新してもページ番号が更新されません。
手動でWORDファイルを開き目次を選択してフィールドの更新をするとページ番号が更新されます。
何かコードに誤りがありますか?

Document doc = new Document("test.docx");

// 空白ページ削除
・・・

// 改ページ挿入
・・・

// 目次更新
doc.UpdateFields();

doc.Save("test.docx");

@ysho UpdateFields の後に UpdatePageLayout メソッドを呼び出してください。 詳細については、ドキュメントを参照してください。
https://docs.aspose.com/words/net/working-with-table-of-contents/#update-table-of-contents

ありがとうございます。
UpdatePageLayoutを呼び出すようにしましたが、やはり目次のページ番号が更新されません。
他に何か問題がありますか?
ちなみに、Aspose.WordsのライセンスはAspose.Words for .NET Developer OEM Subscriptionを使用しています。

// 目次のページ番号を更新
doc.UpdateFields();
doc.UpdatePageLayout();

@ysho テストのために入力および出力ドキュメントをここに添付していただけますか? 問題を確認し、詳細をお知らせいたします。

test.docx (3.7 メガバイト)

入力ファイルになります。(出力ファイルも同じ内容です)
このファイルを読み込んで以下のコードで目次の更新を実施しても更新されません。
出力したファイルを手動で開いて手動でフィールドの更新を実施すると目次が更新されます。
ご確認お願いいたします。

// 目次のページ番号を更新
doc.UpdateFields();
doc.UpdatePageLayout();

@ysho 追加情報をありがとうございます。 残念ながら、私の側では問題を再現できません。 テストには次の単純なコードを使用しました。

Document doc = new Document(@"C:\Temp\in.docx");
doc.UpdateFields();
doc.UpdatePageLayout();
doc.Save(@"C:\Temp\out.docx");

また、私は日本文化でも同じことを試してみました。

CultureInfo culture = Thread.CurrentThread.CurrentCulture;
Thread.CurrentThread.CurrentCulture = new CultureInfo("ja-JP");

Document doc = new Document(@"C:\Temp\in.docx");
doc.UpdateFields();
doc.UpdatePageLayout();
doc.Save(@"C:\Temp\out.docx");

Thread.CurrentThread.CurrentCulture = culture;

出力は次のとおりです。out.docx (3.7 MB)

ご確認いただきありがとうございます。
out.docxの期待値としては添付ファイルの目次の内容を期待していたのですが、
以下のコードでは更新されないようですね。

doc.UpdateFields();
doc.UpdatePageLayout();

目次の更新についてはMicrosoft.Office.Interop.Wordを使用する方法を検討させていただきます。

out.docx (3.7 メガバイト)

@ysho 残念ながら、何が問題なのかは完全には明らかではありません。 ご覧のとおり、目次項目と目次ページ番号は Aspose.Words によって適切に更新されます。 問題を詳しく説明していただけますか? 問題を示すためにスクリーンショットを提供することもできます。

問題を説明するためにキャプチャを添付いたします。
問題はページ番号が③のように更新されないことです。
現状は①と②で同じ値が出力されます。
③の通りにページ番号を更新する方法はありますでしょうか?

image.png (336.5 キロバイト)

@ysho この問題は、ドキュメントで使用されているフォントがドキュメントを処理するマシンで使用できないために発生する可能性があります。 Aspose.Words では、目次を更新するときにドキュメント レイアウトを構築するためにドキュメントで使用されているフォントが必要であることに注意してください。 Aspose.Words がドキュメントで使用されているフォントを見つけられない場合、フォントは置換されます。 これにより、フォント メトリックの違いによりフォントの不一致やドキュメント レイアウトの違いが発生する可能性があり、その結果、目次内のページ番号が不正確になる可能性があります。 IWarningCallback を実装すると、フォント置換が実行されたときに通知を受け取ることができます。

私の場合、次のフォントは利用できません。

  • HGSゴシックE

IWarningCallbackを実装して試してみましたがフォント置換は実行されていませんでした。
代わりに"Table width exceed maximum allowed, table was resized."が発生していました。
ドキュメント内の表に原因があるようです。
このwarnigはどのような場合に発生するのでしょうか?

参考までに、私のPCのFontフォルダを確認したところ HGSゴシックEは存在してます

@ysho このような警告は、表の幅が「1584pt」(MS Word で許可される最大幅)より大きい場合に表示されます。 この場合、テーブルの幅が調整されます。

テストのためにここに HGSゴシックE を添付していただけますか? 私の方で確認して、詳しい情報をご提供させていただきます。 また、次のコードも試してください。

LoadOptions opt = new LoadOptions();
opt.LanguagePreferences.DefaultEditingLanguage = EditingLanguage.Japanese;

Document doc = new Document(@"C:\Temp\in.docx", opt);
doc.UpdateFields();
doc.UpdatePageLayout();
doc.Save(@"C:\temp\out.docx");

また、お客様側で MS Word を使用して文書を PDF に変換し、ここに添付してください。これにより、期待される出力がどのようになるかを確認できます。

HGSゴシックE を添付しますのでご確認お願いいたします。
HGSゴシックE.zip (1.9 メガバイト)

上記のコードにについても試してみましたが、やはり、フォント置換は実行されていませんでした。
添付のWarningが発生しました。
Warning.png (23.3 キロバイト)

out.docxをPDFに変換したものになります。PDFに変換した場合は目次が期待通りに出力されています。
out.pdf (7.0 メガバイト)

@ysho
We have opened the following new ticket(s) in our internal issue tracking system and will deliver their fixes according to the terms mentioned in Free Support Policies.

Issue ID(s): WORDSNET-25752

You can obtain Paid Support Services if you need support on a priority basis, along with the direct access to our Paid Support management team.

@alexey.noskov
Thank you for confirming this.
Also, thanks for the useful info.
It was very helpful.
I hope this issue will be resolved.

1 Like

@ysho The issue was resolved by the recent WORDSNET-25937 integration. The fix will be included into the next 23.12 version of Aspose.Words. We will additionally notify you once it is published.

Please note that kerning is enabled for text in some tables in your document, and code changes might be required on your side in order to get the correct layout.
Kerning is an advanced typography feature which is supported by Aspose.Words via Aspose.Words.Shaping.HarfBuzz nuget package.
You should install the above package and modify the code as shown below:

Document doc = new Document("in.docx"); 
// Configure shaping in order to support font kerning. 
doc.LayoutOptions.TextShaperFactory = Aspose.Words.Shaping.HarfBuzz.HarfBuzzTextShaperFactory.Instance; 
...

See more about advanced typograph features in the documentation: https://docs.aspose.com/words/net/enable-opentype-features/

The issues you have found earlier (filed as WORDSNET-25752) have been fixed in this Aspose.Words for .NET 23.12 update also available on NuGet.