كيفية العمل مع فهرس وجداول Word في .NET
كيفية العمل مع فهرس وجداول Word في .NET
يوضح هذا الدليل كيفية إدراج وبناء هياكل المرجعية المدفوعة بالحقول التي تستخدمها مستندات Word لتلخيص محتواها — فهرس المحتويات، فهرس أبجدي، وجدول السلطات — باستخدام Aspose.Words FOSS لـ .NET. كل منها يُجمع من حقول علامات في مكان آخر من المستند: FieldToc يجمع الإدخالات القائمة على العناوين والمُعلَّمة بـ FieldTC, FieldIndex يجمع علامات FieldXE, وFieldToa يجمع اقتباسات FieldTA. كل فئة حقل في هذه العائلة مشتقة من النوع الأساسي Field في مساحة الاسم Aspose.Words.Fields.
دليل خطوة بخطوة
الخطوة 1: إدراج فهرس المحتويات
استدعِ DocumentBuilder.InsertTableOfContents(switches) في الموضع الذي يجب أن يظهر فيه فهرس المحتويات، مع تمرير سلسلة تبديل حقول على نمط Word — على سبيل المثال "\o \"1-3\" \h \z \u" — للتحكم في مستويات العناوين المُضمَّنة وكيفية تنسيق النتيجة، وهي نفس المفاتيح التي يكتبها Word عندما يُدرج فهرس المحتويات عبر واجهته. هذا يُدرج FieldToc، الذي يُظهر أيضًا نفس البنية مباشرةً كخصائص: HeadingLevelRange/EntryLevelRange للمستويات المتضمنة، InsertHyperlinks، PreserveTabs/PreserveLineBreaks، وBookmarkName. لجدول الأشكال بدلاً من فهرس المحتويات، عيّن TableOfFiguresLabel أو CaptionlessTableOfFiguresLabel على نفس FieldToc.
الخطوة 2: وضع علامات مخصصة لإدخالات فهرس المحتويات
ليس كل مدخل يجب أن يتضمنه جدول المحتويات يأتي من نمط العنوان. أدخل FieldTC في موقع محدد لتحديده كمدخل جدول محتويات مستقل عن نمط الفقرة: FieldTC.Text هو نص المدخل، EntryLevel هو مستوى المخطط الذي يجب أن يظهر فيه، وOmitPageNumber يمنع رقم الصفحة لهذا المدخل. عندما يحتاج المستند إلى أكثر من جدول محتويات — على سبيل المثال جدول محتويات رئيسي وجدول منفصل للأشكال — اضبط FieldTC.TypeIdentifier لتطابق EntryIdentifier الخاص بـ FieldToc الذي يجب أن يجمعه.
الخطوة 3: إنشاء فهرس من المدخلات المعلمة
ضع علامة FieldXE على كل موقع ينتمي إلى الفهرس، مع ضبط Text إلى نص المدخل؛ EntryType يجمع المدخلات إلى مستويات فرعية باستخدام صيغة مفصولة بنقطتين، وPageRangeBookmarkName يحدد إشارة مرجعية يصبح امتدادها نطاق صفحات في الفهرس بدلاً من رقم صفحة واحد. FieldIndex يجمع جميع علامات FieldXE في المستند إلى النتيجة الأبجدية — اضبط Heading لإدراج فواصل عناوين حروف (A, B, C…) , LetterRange لتقييد الفهرس على جزء من الأبجدية, وRunSubentriesOnSameLine للتحكم في تخطيط المدخلات الفرعية. PageNumberSeparator, PageRangeSeparator, SequenceSeparator, وCrossReferenceSeparator تتحكم في علامات الترقيم بين المدخل وإشارة الصفحة الخاصة به. أنماط الفهرس البصرية المدمجة في Word متاحة كعدد FieldIndexFormat (Template, Classic, Fancy, Modern, Bulleted, Formal, Simple).
الخطوة 4: إنشاء جدول للسلطات من الاقتباسات
ضع علامة FieldTA على كل اقتباس في النص: LongCitation وShortCitation يحملان نص الاقتباس، EntryCategory يجمعه تحت عنوان مثل “Cases” أو “Statutes”, وIsBold/IsItalic يتحكمان في تنسيقه. FieldToa يجمع تلك الاقتباسات في جدول — EntryCategory يحدد الفئة التي سيتم تجميعها, UseHeading يتحكم فيما إذا كانت عناوين الفئات تظهر, UsePassim يطبق قاعدة “passim” للمصادر التي تُستشهد بها مرات عديدة, وPageRangeSeparator/PageNumberListSeparator/SequenceSeparator/EntrySeparator/RemoveEntryFormatting تتحكم في التخطيط.
الخطوة 5: تحديث الحقول بعد تغيّر المستند
لا يقوم جدول المحتويات أو الفهرس أو جدول السلطات بتحديث نفسه عندما يتغيّر المحتوى المحيط. استدعِ Update() على الحقل المحدد — على سبيل المثال FieldToc.Update() — لإعادة حساب نتيجته, أو FieldToc.UpdatePageNumbers() عندما تحتاج فقط جزء رقم الصفحة إلى تحديث. لتحديث كل الحقول في المستند دفعة واحدة بدلاً من واحدة تلو الأخرى, استدعِ Document.UpdateFields(). تذكَّر أن أرقام الصفحات في نتائج هذه الحقول تُقَيَّم كقيم نائبة في هذا الإصدار, لأن تخطيط الصفحات والترقيم ليسا جزءًا منه.
الخطوة 6: تضمين المدخلات من مستندات أخرى
أدرج FieldRD لجعل جدول المحتويات (TOC) أو الفهرس أو جدول المراجع يسحب الإدخالات من ملف آخر عند التجميع. يحدد FieldRD.FileName الوثيقة المشار إليها، وIsPathRelative يتحكم فيما إذا كان المسار يُحل نسبياً بالنسبة إلى الوثيقة الحالية. أضف FieldRD واحد لكل وثيقة إضافية وقم بتحديث حقل التجميع بعد ذلك حتى يتضمن النتيجة المدمجة المحتوى المشار إليه.
المشكلات الشائعة والحلول
فهرس المحتويات لا يتضمن العناوين المتوقعة. سلسلة المفتاح الخاصة بالفهرس (أو HeadingLevelRange) تستبعد مستويات المخطط تلك. عدّل المفاتيح الممررة إلى InsertTableOfContents، أو اضبط FieldToc.HeadingLevelRange مباشرةً.
إدخال الفهرس لا يظهر حيث كان متوقعًا. المقابل FieldXE العلامة مفقودة، أو أن EntryType لا يتطابق بناء الجملة الفرعي مع ما FieldIndex يتوقع. FieldXE العلامات موجودة و EntryType القيم مُنسقة بشكل متسق.
تبدو نتائج الحقل قديمة بعد تحرير المحتوى. لم يتم تحديث الحقل بعد التحرير. استدعِ Update() على الحقل المحدد، أو Document.UpdateFields() لتحديث جميع الحقول دفعة واحدة.
لا يتم تضمين المدخلات من مستند آخر عند التجميع. لا FieldRD الإشارة إلى أن ذلك المستند موجود، أو IsPathRelative لا يتطابق مع الطريقة التي يجب أن يُحلّ بها المسار. أضف FieldRD مع الصحيح FileName and IsPathRelative الإعداد.
الأسئلة المتكررة
كيف يمكنني إدراج جدول محتويات برمجيًا؟
استدعِ DocumentBuilder.InsertTableOfContents(switches) بسلسلة مفاتيح على نمط Word، مثل "\o \"1-3\" \h \z \u"، في الموضع الذي يجب أن يظهر فيه جدول المحتويات.
كيف يمكنني وضع علامة على النص كإدخال فهرس؟
أدخل حقل FieldXE في ذلك الموقع مع ضبط خاصية Text إلى نص الإدخال؛ يقوم FieldIndex بتجميع جميع علامات FieldXE في المستند إلى نتيجة الفهرس.
ما الفرق بين FieldTC وإدخال جدول محتويات يعتمد على العناوين؟
السلوك الافتراضي لجدول المحتويات في Word يجمع الإدخالات من الفقرات باستخدام أنماط العناوين. يضع FieldTC علامة على موقع عشوائي كإدخال جدول محتويات مستقل عن نمط الفقرة، والذي يمكن لـ FieldToc تضمينه عبر مطابقة قيم EntryIdentifier/TypeIdentifier.
كيف يمكنني تحديث جدول المحتويات أو الفهرس بعد تعديل المستند؟
استدعِ Update() على الحقل المحدد (أو UpdatePageNumbers() على FieldToc لأرقام الصفحات فقط)، أو Document.UpdateFields() لتحديث كل الحقول في المستند.
هل يمكن تجميع جدول المحتويات أو الفهرس عبر مستندات متعددة؟
نعم — أدرج FieldRD يشير إلى كل مستند إضافي عبر FileName. حقل التجميع (FieldToc، FieldIndex أو FieldToa) يتضمن الإدخالات من المستندات المشار إليها بمجرد تحديثه.