Aspose.Words for .NET樣式處理教程——如何插入和使用目錄字段
Aspose.Words For .Net是一種高級Word文檔處理API,用于執(zhí)行各種文檔管理和操作任務。API支持生成,修改,轉(zhuǎn)換,呈現(xiàn)和打印文檔,而無需在跨平臺應用程序中直接使用Microsoft Word。此外,API支持所有流行的Word處理文件格式,并允許將Word文檔導出或轉(zhuǎn)換為固定布局文件格式和最常用的圖像/多媒體格式。
接下來我們將進入關于“樣式處理”的介紹,在Aspose.Words中學會如何插入和使用目錄字段。
>>Aspose.Words for .NET迎來2020第一次更新v20.1,支持插入LINQ Reporting Engine標簽,點擊下載體驗
如何插入和使用目錄字段
通常,我們會使用包含目錄(TOC)的文檔。使用Aspose.Words,可以插入自己的目錄或僅用幾行代碼即可完全重建文檔中的現(xiàn)有目錄。本文概述了如何使用目錄字段并演示了:
- 如何插入全新的目錄
- 更新文檔中的新目錄或現(xiàn)有目錄。
- 指定開關以控制目錄的格式和整體結(jié)構(gòu)。
- 如何修改目錄的樣式和外觀。
- 如何從文檔中刪除整個TOC字段以及所有條目。
以編程方式插入目錄
調(diào)用DocumentBuilder.InsertTableOfContents方法將TOC字段插入DocumentBuilder當前位置的文檔中。 Word文檔中的目錄可以通過多種方式構(gòu)建,并使用各種選項進行格式化。您將切換到該方法的字段切換,以控制表的構(gòu)建方式和在文檔中顯示的方式。
在Microsoft Word中插入的目錄中使用的默認開關是“ \ o” 1-3 \ h \ z \ u”。這些開關的說明以及受支持的開關的列表可在本文后面找到??梢允褂迷撝改汐@取正確的開關,或者如果已經(jīng)擁有包含想要的類似TOC的文檔,則可以顯示域代碼(ALT + F9)并直接從該字段復制開關。下例顯示了如何將目錄字段插入文檔。
// The path to the documents directory. string dataDir = RunExamples.GetDataDir_WorkingWithDocument(); // Initialize document. Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Insert a table of contents at the beginning of the document. builder.InsertTableOfContents("\\o \"1-3\" \\h \\z \\u"); // The newly inserted table of contents will be initially empty. // It needs to be populated by updating the fields in the document. doc.UpdateFields(); dataDir = dataDir + "DocumentBuilderInsertTOC_out.doc"; doc.Save(dataDir);
下面的示例演示如何使用標題樣式作為條目將目錄(TOC)插入文檔。
Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Insert a table of contents at the beginning of the document. builder.InsertTableOfContents("\\o \"1-3\" \\h \\z \\u"); // Start the actual document content on the second page. builder.InsertBreak(BreakType.PageBreak); // Build a document with complex structure by applying different heading styles thus creating TOC entries. builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Heading1; builder.Writeln("Heading 1"); builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Heading2; builder.Writeln("Heading 1.1"); builder.Writeln("Heading 1.2"); builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Heading1; builder.Writeln("Heading 2"); builder.Writeln("Heading 3"); builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Heading2; builder.Writeln("Heading 3.1"); builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Heading3; builder.Writeln("Heading 3.1.1"); builder.Writeln("Heading 3.1.2"); builder.Writeln("Heading 3.1.3"); builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Heading2; builder.Writeln("Heading 3.2"); builder.Writeln("Heading 3.3"); doc.UpdateFields(); dataDir = dataDir + "DocumentBuilderInsertTableOfContents_out.doc"; doc.Save(dataDir);
該代碼演示了新目錄插入到空白文檔中。然后,使用DocumentBuilder類插入具有適當標題樣式的一些樣本內(nèi)容格式,這些樣式用于標記要包含在TOC中的內(nèi)容。接下來的幾行通過更新文檔的字段和頁面布局來填充目錄。
更新目錄
Aspose.Words允許您僅用幾行代碼即可完全更新TOC。在對文檔進行更改后,可以執(zhí)行此操作以填充新插入的目錄或更新現(xiàn)有目錄。必須使用以下兩種方法來更新文檔中的TOC字段:
- Document.UpdateFields
- Document.UpdatePageLayout
請注意,這兩個更新方法必須按該順序調(diào)用。如果反轉(zhuǎn),將填充目錄,但不會顯示頁碼??梢愿氯我鈹?shù)量的不同目錄。這些方法將自動更新文檔中找到的所有目錄。下例顯示了如何通過調(diào)用字段更新來完全重建文檔中的TOC字段。
doc。UpdateFields();
插入TC字段
可以通過調(diào)用DocumentBuilder.InsertField方法并將字段名稱指定為“ TC”以及所需的任何開關,在DocumentBuilder的當前位置插入新的TC字段。下例顯示了如何使用DocumentBuilder將TC字段插入文檔中。
// The path to the documents directory. string dataDir = RunExamples.GetDataDir_WorkingWithDocument(); // Initialize document. Document doc = new Document(); // Create a document builder to insert content with. DocumentBuilder builder = new DocumentBuilder(doc); // Insert a TC field at the current document builder position. builder.InsertField("TC \"Entry Text\" \\f t"); dataDir = dataDir + "DocumentBuilderInsertTCField_out.doc"; doc.Save(dataDir);
通常,為TOC指定特定的文本行,并用TC字段標記。最簡單的方法在MS Word這樣做是為了突出顯示文本,然后按ALT + SHIFT + O 。這將使用所選文本自動創(chuàng)建TC字段。相同的技術(shù)可以通過代碼來實現(xiàn)。下面的代碼將查找與輸入匹配的文本,并在與文本相同的位置插入TC字段。該代碼基于本文中使用的相同技術(shù)。 下例顯示了如何在文檔的文本中查找和插入TC字段。
Document doc = new Document(); FindReplaceOptions options = new FindReplaceOptions(); // Highlight newly inserted content. options.ApplyFont.HighlightColor = Color.DarkOrange; options.ReplacingCallback = new InsertTCFieldHandler("Chapter 1", "\\l 1"); // Insert a TC field which displays "Chapter 1" just before the text "The Beginning" in the document. doc.Range.Replace(new Regex("The Beginning"), "", options);
public sealed class InsertTCFieldHandler : IReplacingCallback { // Store the text and switches to be used for the TC fields. private string mFieldText; private string mFieldSwitches; ////// The switches to use for each TC field. Can be an empty string or null. ///public InsertTCFieldHandler(string switches) : this(string.Empty, switches) { mFieldSwitches = switches; } ////// The display text and switches to use for each TC field. Display name can be an empty string or null. ///public InsertTCFieldHandler(string text, string switches) { mFieldText = text; mFieldSwitches = switches; } ReplaceAction IReplacingCallback.Replacing(ReplacingArgs args) { // Create a builder to insert the field. DocumentBuilder builder = new DocumentBuilder((Document)args.MatchNode.Document); // Move to the first node of the match. builder.MoveTo(args.MatchNode); // If the user specified text to be used in the field as display text then use that, otherwise use the // Match string as the display text. string insertText; if (!string.IsNullOrEmpty(mFieldText)) insertText = mFieldText; else insertText = args.Match.Value; // Insert the TC field before this node using the specified string as the display text and user defined switches. builder.InsertField(string.Format("TC \"{0}\" {1}", insertText, mFieldSwitches)); // We have done what we want so skip replacement. return ReplaceAction.Skip; } }
還想要更多嗎?您可以點擊閱讀【2019 · Aspose最新資源整合】,查找需要的教程資源。如果您有任何疑問或需求,請隨時聯(lián)系慧都客服,我們很高興為您提供查詢和咨詢。