جدول مطالب (TOC) در یک سند Word به شما یک نمای کلی از محتوای یک سند می دهد. علاوه بر این، به شما امکان می دهد به بخش خاصی از سند بروید. در این مقاله نحوه کار با فهرست مطالب در اسناد ورد را به صورت برنامه نویسی می آموزید. به ویژه، این مقاله نحوه افزودن، استخراج، به روز رسانی یا حذف فهرست مطالب در اسناد Word در سی شارپ را پوشش می دهد.

C# API برای افزودن، ویرایش یا حذف TOC در اسناد Word

برای کار با فهرست مطالب در اسناد Word، از Aspose.Words for .NET استفاده می کنیم. API مذکور برای انجام ویژگی‌های اولیه و پیشرفته اتوماسیون Word از درون برنامه‌های NET طراحی شده است. به‌علاوه، به شما تسلط کاملی بر دستکاری فهرست مطالب در اسناد Word می‌دهد. می‌توانید API را دانلود یا با استفاده از NuGet نصب کنید.

PM> Install-Package Aspose.Words

اضافه کردن فهرست مطالب در یک سند Word در سی شارپ

در زیر مراحل اضافه کردن فهرست مطالب به سند Word با استفاده از Aspose.Words برای دات نت ارائه شده است.

  • یک نمونه از کلاس Document ایجاد کنید (در صورت بارگیری یک سند Word موجود، مسیر فایل را در سازنده ارائه کنید).
  • یک نمونه از کلاس DocumentBuilder ایجاد کنید و آن را با شی Document که قبلا ایجاد شده است مقداردهی اولیه کنید.
  • فهرست مطالب را با استفاده از روش DocumentBuilder.InsertTableOfContents("\\o \"1-3\" \\h \\z \\u") درج کنید.
  • فیلدها را با استفاده از روش Document.UpdateFields() به روز کنید.
  • سند Word را با استفاده از روش Document.Save(String) ذخیره کنید.

نمونه کد زیر نحوه اضافه کردن فهرست مطالب را در یک سند Word در سی شارپ نشان می دهد.

// برای نمونه های کامل و فایل های داده، لطفاً به https://github.com/aspose-words/Aspose.Words-for-.NET بروید
// مسیر دایرکتوری اسناد
string dataDir = RunExamples.GetDataDir_WorkingWithDocument();
// مقدار دهی اولیه سند
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);

// فهرست مطالب را در ابتدای سند درج کنید.
builder.InsertTableOfContents("\\o \"1-3\" \\h \\z \\u");

// فهرست مطالبی که به تازگی درج شده است ابتدا خالی خواهد بود.
// باید با به روز رسانی فیلدهای موجود در سند پر شود.
doc.UpdateFields();
dataDir = dataDir + "DocumentBuilderInsertTOC_out.doc";
doc.Save(dataDir);

سی شارپ فهرست مطالب را از یک سند Word استخراج کنید

مراحل زیر برای استخراج فیلدها از فهرست مطالب در یک سند Word است.

  • سند Word را با استفاده از کلاس Document بارگیری کنید.
  • با استفاده از مجموعه Document.Range.Fields در هر Field در سند حلقه بزنید.
  • بررسی کنید که آیا نوع فیلد با استفاده از ویژگی Field.Type یک لینک است.
  • بررسی کنید که آیا این فیلد زیر جدول قسمت محتویات قرار دارد یا خیر.
  • اطلاعات فیلد را بازیابی و چاپ کنید.

نمونه کد زیر نحوه استخراج فهرست مطالب از یک سند Word را با استفاده از C# نشان می دهد.

// مسیر دایرکتوری اسناد
string dataDir = RunExamples.GetDataDir_WorkingWithDocument();

string fileName = "TOC.doc";
Aspose.Words.Document doc = new Aspose.Words.Document(dataDir + fileName);

foreach (Field field in doc.Range.Fields)
{
	if (field.Type.Equals(Aspose.Words.Fields.FieldType.FieldHyperlink))
	{
		FieldHyperlink hyperlink = (FieldHyperlink)field;
		if (hyperlink.SubAddress != null && hyperlink.SubAddress.StartsWith("_Toc"))
		{
			Paragraph tocItem = (Paragraph)field.Start.GetAncestor(NodeType.Paragraph);
			Console.WriteLine(tocItem.ToString(SaveFormat.Text).Trim());
			Console.WriteLine("------------------");
			if (tocItem != null)
			{
				Bookmark bm = doc.Range.Bookmarks[hyperlink.SubAddress];
				// مکانی را دریافت کنید که این مورد TOC به آن اشاره می کند
				Paragraph pointer = (Paragraph)bm.BookmarkStart.GetAncestor(NodeType.Paragraph);
				Console.WriteLine(pointer.ToString(SaveFormat.Text));
			}
		} // End If
	}// End If
}// End Foreach

به روز رسانی فهرست مطالب در سند Word در سی شارپ

هر زمان که محتوایی را به سند Word اضافه می کنید، باید فهرست مطالب را به روز کنید. برای انجام این کار به صورت برنامه نویسی، کافی است قبل از ذخیره سند، متد Document.UpdateFields() را فراخوانی کنید.

حذف فهرست مطالب در سند ورد در سی شارپ

Aspose.Words for .NET همچنین به شما امکان می دهد فهرست مطالب را از یک سند Word حذف کنید. مراحل زیر برای انجام این عملیات آورده شده است.

  • ابتدا سند Word را با استفاده از کلاس Document بارگذاری کنید.
  • گره های FieldStart هر TOC را در یک آرایه دریافت و ذخیره کنید.
  • در میان گره ها حلقه بزنید تا زمانی که گره از نوع FieldEnd (انتهای TOC) را دریافت کنید.
  • گره ها را با استفاده از روش Node.Remove() حذف کنید و سند به روز شده را ذخیره کنید.

نمونه کد زیر نحوه حذف فهرست مطالب از یک سند Word در سی شارپ را نشان می دهد.

// برای نمونه های کامل و فایل های داده، لطفاً به https://github.com/aspose-words/Aspose.Words-for-.NET بروید
public static void Run()
{
    
    // مسیر دایرکتوری اسناد
    string dataDir = RunExamples.GetDataDir_WorkingWithStyles();

    // سندی را باز کنید که حاوی یک TOC است.
    Document doc = new Document(dataDir + "Document.TableOfContents.doc");

    // فهرست اول مطالب را از سند حذف کنید.
    RemoveTableOfContents(doc, 0);

    dataDir = dataDir + "Document.TableOfContentsRemoveToc_out.doc";
    // خروجی را ذخیره کنید.
    doc.Save(dataDir);
    
    Console.WriteLine("\nSpecified TOC from a document removed successfully.\nFile saved at " + dataDir);
}
///<summary>
/// فیلد فهرست مطالب مشخص شده را از سند حذف می کند.
///</summary>
///<param name="doc"> سندی برای حذف فیلد از.</param>
///<param name="index"> شاخص مبتنی بر صفر TOC برای حذف.</param>
public static void RemoveTableOfContents(Document doc, int index)
{
    // برای دسترسی سریع، گره های FieldStart فیلدهای TOC را در سند ذخیره کنید.
    ArrayList fieldStarts = new ArrayList();
    // این لیستی برای ذخیره گره های موجود در TOC مشخص شده است. حذف خواهند شد
    // در پایان این روش.
    ArrayList nodeList = new ArrayList();

    foreach (FieldStart start in doc.GetChildNodes(NodeType.FieldStart, true))
    {
        if (start.FieldType == FieldType.FieldTOC)
        {
            // همه FieldStarts را که از نوع FieldTOC هستند اضافه کنید.
            fieldStarts.Add(start);
        }
    }

    // اطمینان حاصل کنید که TOC مشخص شده توسط شاخص تصویب شده وجود دارد.
    if (index > fieldStarts.Count - 1)
        throw new ArgumentOutOfRangeException("TOC index is out of range");

    bool isRemoving = true;
    // FieldStart TOC مشخص شده را دریافت کنید.
    Node currentNode = (Node)fieldStarts[index];

    while (isRemoving)
    {
        // ایمن تر است که این گره ها را ذخیره کنید و بعداً همه آنها را به یکباره حذف کنید.
        nodeList.Add(currentNode);
        currentNode = currentNode.NextPreOrder(doc);

        // هنگامی که با یک گره FieldEnd از نوع FieldTOC روبرو می شویم، می دانیم که در پایان هستیم
        // از TOC فعلی و ما می توانیم در اینجا توقف کنیم.
        if (currentNode.NodeType == NodeType.FieldEnd)
        {
            FieldEnd fieldEnd = (FieldEnd)currentNode;
            if (fieldEnd.FieldType == FieldType.FieldTOC)
                isRemoving = false;
        }
    }

    // تمام گره های موجود در TOC مشخص شده را حذف کنید.
    foreach (Node node in nodeList)
    {
        node.Remove();
    }
}

مجوز API رایگان دریافت کنید

در صورتی که می‌خواهید API را بدون محدودیت ارزیابی امتحان کنید، می‌توانید یک مجوز موقت رایگان دریافت کنید.

نتیجه

در این مقاله نحوه کار با فهرست مطالب در سند Word را به صورت برنامه نویسی آموخته اید. راهنمای گام به گام و نمونه کد نحوه افزودن، به روز رسانی، استخراج و حذف فهرست مطالب از اسناد Word در سی شارپ را نشان داده است. می‌توانید با استفاده از مستندات درباره C# Word automation API بیشتر کاوش کنید. در صورت داشتن هرگونه سوال یا نگرانی، لطفاً از طریق [تالار گفتمان21 ما با ما تماس بگیرید.

همچنین ببینید