Gembox 文档删除了 table 的内容
Gembox document removes table of contents
我正在使用 Gembox 文档替换 docx 文档中的一些文本,效果很好。但是,我有一个 table 的内容字段在保存文档后消失了。
我尝试执行以下操作,但该字段仍然消失,只留下占位符文本:
var toc = (TableOfEntries)document.GetChildElements(true, ElementType.TableOfEntries).First();
toc.Update();
document.GetPaginator(new PaginatorOptions() { UpdateFields = true });
更新(2021-01-15):
请使用 BugFixes page or from NuGet 的最新版本重试。
最新版本将在使用带';'的区域性的机器上运行作为列表分隔符的字符。
或者您可以像这样指定文化:
var toc = (TableOfEntries)document.GetChildElements(true, ElementType.TableOfEntries).First();
CultureInfo.CurrentCulture = new CultureInfo("fr");
toc.Update();
document.GetPaginator(new PaginatorOptions() { UpdateFields = true });
此外,缺少制表位的问题现在也应该得到解决。
原文:
当我尝试从 MS Word 更新您的目录时,我得到以下信息:
No table of contents entries found.
在调查了您的 TOC 元素的字段代码后,我发现了问题所在。
这是您拥有的说明文字:
{ TOC \h \z \t "TitreChapitre;1;SousTitreChapitre;2" }
这些分号字符分隔符 (;) 是依赖于文化的。换句话说,更新此 TOC 元素将在具有法语区域和设置的计算机上运行,但在具有英语区域和设置的计算机上将不起作用。
我目前正在休假,所以我对此无能为力。等我回来再给你解决这个问题
现在,您可以使用以下解决方法(我还注意到缺少 TabStop
的问题,此解决方法也将涵盖该问题):
var toc = (TableOfEntries)document.GetChildElements(true, ElementType.TableOfEntries).First();
var section = toc.Parent as Section;
var tocWidth = section.PageSetup.PageWidth - section.PageSetup.PageMargins.Left - section.PageSetup.PageMargins.Right;
var toc1Style = document.Styles["toc 1"] as ParagraphStyle;
var toc1TabStop = new TabStop(tocWidth - toc1Style.ParagraphFormat.RightIndentation, TabStopAlignment.Right, TabStopLeader.Dot);
toc1Style.ParagraphFormat.Tabs.Add(toc1TabStop);
var toc2Style = document.Styles["toc 2"] as ParagraphStyle;
var toc2TabStop = new TabStop(tocWidth - toc2Style.ParagraphFormat.RightIndentation, TabStopAlignment.Right, TabStopLeader.Dot);
toc2Style.ParagraphFormat.Tabs.Add(toc2TabStop);
toc.InstructionText = toc.InstructionText.Replace(';', ',');
toc.Update();
document.GetPaginator(new PaginatorOptions() { UpdateFields = true });
希望这对你有用。
我正在使用 Gembox 文档替换 docx 文档中的一些文本,效果很好。但是,我有一个 table 的内容字段在保存文档后消失了。 我尝试执行以下操作,但该字段仍然消失,只留下占位符文本:
var toc = (TableOfEntries)document.GetChildElements(true, ElementType.TableOfEntries).First();
toc.Update();
document.GetPaginator(new PaginatorOptions() { UpdateFields = true });
更新(2021-01-15):
请使用 BugFixes page or from NuGet 的最新版本重试。
最新版本将在使用带';'的区域性的机器上运行作为列表分隔符的字符。
或者您可以像这样指定文化:
var toc = (TableOfEntries)document.GetChildElements(true, ElementType.TableOfEntries).First();
CultureInfo.CurrentCulture = new CultureInfo("fr");
toc.Update();
document.GetPaginator(new PaginatorOptions() { UpdateFields = true });
此外,缺少制表位的问题现在也应该得到解决。
原文:
当我尝试从 MS Word 更新您的目录时,我得到以下信息:
No table of contents entries found.
在调查了您的 TOC 元素的字段代码后,我发现了问题所在。
这是您拥有的说明文字:
{ TOC \h \z \t "TitreChapitre;1;SousTitreChapitre;2" }
这些分号字符分隔符 (;) 是依赖于文化的。换句话说,更新此 TOC 元素将在具有法语区域和设置的计算机上运行,但在具有英语区域和设置的计算机上将不起作用。
我目前正在休假,所以我对此无能为力。等我回来再给你解决这个问题
现在,您可以使用以下解决方法(我还注意到缺少 TabStop
的问题,此解决方法也将涵盖该问题):
var toc = (TableOfEntries)document.GetChildElements(true, ElementType.TableOfEntries).First();
var section = toc.Parent as Section;
var tocWidth = section.PageSetup.PageWidth - section.PageSetup.PageMargins.Left - section.PageSetup.PageMargins.Right;
var toc1Style = document.Styles["toc 1"] as ParagraphStyle;
var toc1TabStop = new TabStop(tocWidth - toc1Style.ParagraphFormat.RightIndentation, TabStopAlignment.Right, TabStopLeader.Dot);
toc1Style.ParagraphFormat.Tabs.Add(toc1TabStop);
var toc2Style = document.Styles["toc 2"] as ParagraphStyle;
var toc2TabStop = new TabStop(tocWidth - toc2Style.ParagraphFormat.RightIndentation, TabStopAlignment.Right, TabStopLeader.Dot);
toc2Style.ParagraphFormat.Tabs.Add(toc2TabStop);
toc.InstructionText = toc.InstructionText.Replace(';', ',');
toc.Update();
document.GetPaginator(new PaginatorOptions() { UpdateFields = true });
希望这对你有用。