【问题标题】:Gembox document removes table of contentsGembox 文档删除目录
【发布时间】:2021-01-19 16:26:48
【问题描述】:

我正在使用 Gembox 文档替换 docx 文档中的一些文本,效果很好。但是,我有一个目录字段在保存文档后消失。 我尝试执行以下操作,但该字段仍然消失,只留下占位符文本:

var toc = (TableOfEntries)document.GetChildElements(true, ElementType.TableOfEntries).First();
toc.Update();
document.GetPaginator(new PaginatorOptions() { UpdateFields = true });

【问题讨论】:

标签: c# gembox-document


【解决方案1】:

更新(2021-01-15):

请使用BugFixes 页面或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 更新您的 TOC 时,我得到了以下信息:

未找到目录条目。

在调查了您的 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 });

我希望这对你有用。

【讨论】:

  • 感谢您的回答,效果很好。唯一的缺点是目录字段不再手动更新,因此如果我们更改任何标题文本,我们将无法更新它。
  • @yqit 请检查更新后的答案。如果您还需要什么,请告诉我。
猜你喜欢
  • 2023-04-03
  • 1970-01-01
  • 2016-04-29
  • 2011-08-06
  • 2013-02-07
  • 2011-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多