Bookmarks

Bookmarks

يوضح هذا الدليل كيفية قراءة وإدراج والتنقل إلى وإزالة الإشارات المرجعية في مستند Word باستخدام Aspose.Words FOSS لـ .NET. تُعد الإشارة المرجعية علامة على موقع مُسمى أو نطاق من المحتوى بحيث يمكن البحث عنه أو التنقل إليه أو استخدامه كنقطة إدراج لتعديلات إضافية. تمثّل Aspose.Words FOSS لـ .NET الإشارات المرجعية باستخدام الفئات Bookmark، BookmarkStart، وBookmarkEnd، وتوفر طرق DocumentBuilder لإنشاءها وتحديد موقعها أثناء تأليف أو تحرير المستند.


قراءة الإشارات المرجعية

كل Range يعرض الإشارات المرجعية التي يحتويها عبر خاصية Bookmarks، التي تُعيد BookmarkCollection. بما أن Document نفسه يعرض Range، فإن doc.Range.Bookmarks يُعيد كل إشارة مرجعية في المستند. ابحث عن إشارة مرجعية محددة بالاسم باستخدام الفهرس BookmarkCollection — bookmarks[bookmarkName] — تحقق من عددها باستخدام Count، أو استعرض المجموعة بأكملها باستخدام GetEnumerator(). كل Bookmark يعرض Name والنص الذي يحيطه عبر Text.


إدراج الإشارات المرجعية باستخدام DocumentBuilder

DocumentBuilder هو الطريقة المعتادة لإنشاء الإشارات المرجعية أثناء كتابة مستند. استدعِ StartBookmark(bookmarkName) قبل إدراج المحتوى، ثم EndBookmark(bookmarkName) بعده — يقوم المُنشئ بلف كل ما كُتب بينهما كنطاق مُشار إليه. لنطاق من أعمدة الجدول، استخدم StartColumnBookmark(bookmarkName) وEndColumnBookmark(bookmarkName) بدلاً من ذلك؛ Bookmark.IsColumn الناتج هو true، مع FirstColumn وLastColumn لتحديد نطاق العمود المُعلم. لإعادة تموضع المُنشئ عند إشارة مرجعية موجودة لتعديلات إضافية، استدعِ MoveToBookmark(bookmarkName)، أو الإصدار الزائد MoveToBookmark(bookmarkName, isStart, isAfter) للتحكم في أي طرف من الإشارة المرجعية يضع المؤشر.


هيكل الإشارة المرجعية في شجرة المستند

يتم تمثيل العلامة المرجعية في شجرة المستند كزوج من العقد: BookmarkStart و BookmarkEnd، كلاهما مُنشأ كـ BookmarkStart(doc, name) / BookmarkEnd(doc, name). كل واحدة ترتبط مرة أخرى بكائنها المنطقي Bookmark — BookmarkStart.Bookmark يعيده، و Bookmark بدورها تكشف عن خصائص BookmarkStart و BookmarkEnd التي تشير إلى عقدتي الحد الخاصتين بها. لأن BookmarkStart و BookmarkEnd هما عقد عادية، فإنهما يدعمان عمليات العقد القياسية مثل GetText() و Clone(isCloneChildren) و GetAncestor(ancestorType)، ويمكن العثور عليهما بالتجول في الشجرة مثل أي نوع آخر من العقد.


إزالة العلامات المرجعية

استدعِ Bookmark.Remove() لحذف علامات البداية والنهاية لعلامة مرجعية واحدة — هذا يزيل العلامة المرجعية نفسها، وليس محتوى المستند الذي تحويه. لإزالة العلامات المرجعية بشكل جماعي، استخدم BookmarkCollection.Remove(bookmark) أو Remove(bookmarkName) أو RemoveAt(index) أو Clear() لإسقاط جميع العلامات المرجعية في النطاق دفعة واحدة.


نصائح وأفضل الممارسات

  • يفضل استخدام فهرس BookmarkCollection (bookmarks["BookmarkName"]) بدلاً من التكرار اليدوي عندما تكون بالفعل على علم باسم العلامة المرجعية المستهدفة.
  • دائمًا قم بزوج استدعاء StartBookmark(name) مع استدعاء EndBookmark(name) المطابق باستخدام نفس الاسم — الزوج غير المتطابق يترك العلامة المرجعية غير مكتملة.
  • تحقق من Bookmark.IsColumn قبل قراءة FirstColumn أو LastColumn — هاتان الخاصيتان ذات معنى فقط للعلامات المرجعية العمودية التي تم إنشاؤها باستخدام StartColumnBookmark/EndColumnBookmark.
  • Bookmark.Remove() يحذف فقط علامات العلامة المرجعية، وليس النص المحاط، لذا فإن إزالة علامة مرجعية لا تحذف محتوى المستند أبدًا.
  • استخدم DocumentBuilder.MoveToBookmark() للقفز بمؤشر المُنشئ إلى موقع معروف بدلاً من البحث يدويًا في شجرة العقد عن BookmarkStart.

المشكلات الشائعة

المشكلةالسببالإصلاح
مفهرس BookmarkCollection يُعيد null عند البحث عن اسماسم الإشارة المرجعية غير موجود في النطاق الذي يتم البحث فيهاعرض الأسماء أولاً عبر GetEnumerator() لتأكيد الاسم الدقيق، حسّاس لحالة الأحرف
المحتوى المُدرج غير مُشار إليهلم يتم استدعاء EndBookmark() أبداً، أو تم استدعاؤه باسم مختلف عن StartBookmark()دائمًا قارن StartBookmark(name) مع EndBookmark(name) باستخدام سلسلة الاسم المتطابقة
بيانات إشارة العمود تبدو خاطئةتم قراءة FirstColumn/LastColumn دون التحقق من IsColumn أولًافقط فسر FirstColumn/LastColumn عندما يكون Bookmark.IsColumn هو true

FAQ

كيف أحصل على جميع العلامات المرجعية في المستند؟

اقرأ doc.Range.Bookmarks، والذي يُعيد BookmarkCollection يغطي المستند بأكمله.

هل يمكنني وضع علامة مرجعية لجزء من جدول حسب العمود بدلاً من حسب نطاق النص؟

نعم — استخدم DocumentBuilder.StartColumnBookmark(bookmarkName) و EndColumnBookmark(bookmarkName). العلامة المرجعية الناتجة لديها IsColumn مُعيَّن إلى true، مع FirstColumn/LastColumn لتحديد نطاق العمود.

هل يؤدي حذف العلامة المرجعية إلى حذف النص الذي تُشير إليه؟

لا. Bookmark.Remove() يزيل فقط عقد علامات BookmarkStart/BookmarkEnd؛ يظل محتوى المستند بينهما دون تعديل.

كيف يمكنني نقل المؤشر DocumentBuilder إلى إشارة مرجعية موجودة؟

استدعِ DocumentBuilder.MoveToBookmark(bookmarkName) أو MoveToBookmark(bookmarkName, isStart, isAfter) للتحكم فيما إذا كان المؤشر سيقع في بداية أو نهاية الإشارة المرجعية.

ما الفرق بين التحميلات المتعددة لـ BookmarkCollection.Remove()؟

Remove(bookmark) يأخذ كائن Bookmark، وRemove(bookmarkName) يأخذ اسمه، وRemoveAt(index) يأخذ موقعه في المجموعة — الثلاثة جميعاً يزيلون إشارة مرجعية واحدة، بينما Clear() يزيل كل الإشارات المرجعية في المجموعة.


API Reference ملخص

فئة / طريقةوصف
Bookmarkيمثل إشارة مرجعية واحدة؛ يتيح Name، Text، IsColumn، FirstColumn، LastColumn، وRemove()
BookmarkCollectionالإشارات المرجعية في Range; فهرس حسب الاسم، Remove()، RemoveAt()، Clear()، Count
BookmarkStart / BookmarkEndعقد الوثيقة التي تحدد حدود الإشارة المرجعية; الرجوع عبر Bookmark.BookmarkStart/Bookmark.BookmarkEnd
Range.Bookmarksيعيد BookmarkCollection للنطاق المحدد، بما في ذلك doc.Range.Bookmarks للمستند بالكامل
DocumentBuilder.StartBookmark() / EndBookmark()غلف المحتوى المُدرج في علامة مرجعية مسماة
DocumentBuilder.StartColumnBookmark() / EndColumnBookmark()ضع علامة على نطاق من أعمدة الجدول كعلامة مرجعية
DocumentBuilder.MoveToBookmark()يضع مؤشر المُنشئ عند إشارة مرجعية موجودة

انظر أيضاً

 العربية