• <menu id="w2i4a"></menu>
  • logo Aspose.Words開發(fā)者指南

    文檔首頁>>Aspose.Words開發(fā)者指南>>Aspose.Words for .NET樣式處理教程——如何插入和使用目錄字段

    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)系慧都客服,我們很高興為您提供查詢和咨詢。
    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();