עבודה עם שדות אינדקס וטבלאות
עבודה עם שדות אינדקס וטבלאות
מדריך זה מציג כיצד לעבוד עם משפחת השדות “Index and Tables” של Word — השדות שמאחורי תוכן עניינים, אינדקס, טבלה של איורים, וטבלה של רשויות. כל אחד מהם הוא תת-מחלקה של Field במרחב השמות Aspose.Words.Fields: FieldToc (תוכן עניינים או איורים), FieldIndex (אינדקס), FieldXE (ערך אינדקס), FieldToa (טבלה של רשויות), FieldTA (ערך טבלה של רשויות, או ציטוט), FieldTC (ערך טבלה של תוכן עניינים), ו-FieldRD (מסמך שמופנה, לצורך בניית אינדקס משולב או תוכן עניינים על פני קבצים מרובים).
מחלקת הבסיס של השדה
כל מחלקת שדה במשפחה זו יורשת מ-Field, שמחשפת את Start, Separator ו-End (הצמתים FieldStart, FieldSeparator ו-FieldEnd שהגביל את השדה ב-run stream), Type (ערך FieldType — FieldTOC, FieldIndex, FieldTOA, FieldTOCEntry, FieldIndexEntry, FieldTOAEntry או FieldRefDoc למשפחה זו), Result/DisplayResult (הטקסט המחושב כעת של השדה), IsLocked ו-IsDirty, והמתודות GetFieldCode(), Update(), Unlink() ו-Remove(). Update() מחשבת מחדש את תוצאת השדה; עבור טבלת תוכן, משמעות הדבר היא בנייה מחדש של רשימת הערכים מכותרות המסמך או סימני FieldTC.
הוספת תוכן עניינים
DocumentBuilder.InsertTableOfContents(switches) מכניס FieldToc במיקום הנוכחי של הבונה, תוך שימוש במחרוזת מתגי שדה של Word (לדוגמה "\o \"1-3\" \h \z \u") כדי לשלוט באילו רמות כותרת ייכללו וכיצד התוצאה תעוצב — אותם מתגים ש-Word כותב בעצמו כאשר אתה מוסיף טבלת תוכן דרך הממשק. לאחר ההוספה, FieldToc.UpdatePageNumbers() מחשבת מחדש את חלק מספר העמוד של הערכים הקיימים. FieldToc גם חושפת מאפיינים השולטים ישירות במבנה של הטבלה: HeadingLevelRange ו-EntryLevelRange (אילו רמות מתאר כוללות), EntryIdentifier (זיהוי שדה TC שהטבלה צריכה לאסוף, לבניית טבלאות תוכן מרובות מסמנים שונים של FieldTC), InsertHyperlinks, PreserveTabs/PreserveLineBreaks, EntrySeparator/SequenceSeparator, BookmarkName, ו-— עבור טבלת איורים במקום טבלת תוכן — TableOfFiguresLabel ו-CaptionlessTableOfFiguresLabel.
סימון ערכי תוכן עניינים מותאמים
לא כל ערך במפרט תוכן (TOC) נובע משיטת כותרת. FieldTC מסמן מיקום ספציפי כערך במפרט תוכן באופן עצמאי משיטת הפסקה: FieldTC.Text הוא טקסט הערך, EntryLevel הוא רמת המתאר שבה הוא צריך להופיע, TypeIdentifier מקשר אותו ל-FieldToc.EntryIdentifier בעת בניית יותר ממפרט תוכן אחד, ו-OmitPageNumber מדכא את מספר העמוד עבור ערך זה.
בניית אינדקס
FieldIndex מיישם את שדה INDEX, שמרכז את סימוני FieldXE (רשומת אינדקס) של מסמך לתוך אינדקס אלפביתי. FieldXE.Text הוא טקסט הרשומה, EntryType מקבץ רשומות לתתי-רמות באמצעות תחביר מופרד בנקודותיים, PageRangeBookmarkName מסמן סימנייה שההיקף שלה הופך לטווח עמודים באינדקס במקום למספר עמוד יחיד, ו-IsBold/IsItalic מעצבים את ההתייחסות לעמוד המתקבלת. בצד FieldIndex, Heading מוסיף מפרידי כותרות אותיות (A, B, C…), LetterRange מגביל את האינדקס לתת-קבוצה של האלפבית, RunSubentriesOnSameLine שולט בפריסת תתי-הרשומות, ו-PageNumberSeparator/PageRangeSeparator/SequenceSeparator/CrossReferenceSeparator שולטות בסימני הפיסוק בין הרשומה להתייחסות העמוד. FieldIndexFormat מונה בנפרד את סגנונות ההצגה המובנים של אינדקס ב-Word (Template, Classic, Fancy, Modern, Bulleted, Formal, Simple).
טבלת רשויות
FieldToa ו-FieldTA הם המקבילים של הרשויות ל-FieldIndex/FieldXE: FieldTA מסמן ציטוט בטקסט (LongCitation ו-ShortCitation טקסט, EntryCategory לקיבוץ תחת כותרת כגון “מקרים” או “חוקים”, ו-IsBold/IsItalic לעיצוב), ו-FieldToa מרכיב את הציטוטים האלה לטבלה, כאשר EntryCategory בוחר איזו קטגוריה להרכיב, UseHeading ו-UsePassim שולטים בכותרות הקטגוריות ובקונבנציית “passim” למקורות המצוטטים פעמים רבות, ו-PageRangeSeparator/PageNumberListSeparator/SequenceSeparator/EntrySeparator/RemoveEntryFormatting שולטים בפריסה.
התייחסות לתוכן ממסמכים אחרים
FieldRD מיישם את שדה RD, שמורה לשדה TOC, אינדקס, או טבלת רשויות לכלול ערכים מקובץ אחר בעת ההרכבה — FieldRD.FileName הוא המסמך המופנה, ו-IsPathRelative שולט האם הנתיב מתפרש יחסית למסמך הנוכחי.
טיפים ושיטות מומלצות
- בנה את מחרוזת מתג ה-TOC באותו אופן שבו Word עושה זאת (
\o "1-3" \h \z \u) במקום להגדיר כל נכסFieldTocבנפרד, ואז התאם רק את הנכסים הספציפיים שצריך לשנות לאחר מכן. - הפעל את
FieldToc.UpdatePageNumbers()(אוField.Update()) לאחר שינויי תוכן כך שתוכן עניינים, אינדקס או טבלת רשויות משקפת את המסמך הנוכחי במקום תוצאות מיושנות מהזמן שבו הוא הוכנס. - השתמש ב-
FieldTC.TypeIdentifierיחד עםFieldToc.EntryIdentifierכאשר מסמך דורש יותר מתוכן עניינים אחד (למשל תוכן עניינים ראשי וטבלת ציורים נפרדת) שנבנים ממערכות ערכים שונות. - הגדר את
FieldXE.PageRangeBookmarkName(או את סימון הטווח המקביל שלFieldTA) במקום לעצב ידנית טווח עמודים בטקסט הערך, כך שהאינדקס/טבלה יישארו עקביים אם התוכן זז. - זכור שמספרי העמודים בתוצאות INDEX/TOC/TOA של מהדורה זו מתפרשים כערכי מציין מקום ולא כמספרי עמודים אמיתיים, מכיוון שסידור העמודים והדפסתם אינם חלק מהמהדורה הזו.
בעיות נפוצות
| בעיה | סיבה | תיקון |
|---|---|---|
| תוכן עניינים אינו כולל את הכותרות הצפויות | מחרוזת המתג של ה-TOC (או HeadingLevelRange) משאירה מחוץ רמות המתאר האלה | שנה את המתגים שמעבירים ל-InsertTableOfContents או הגדר FieldToc.HeadingLevelRange |
| ערך אינדקס אינו מופיע במקום הצפוי | הסמן FieldXE המתאים חסר, או שהתחביר של תת-רמה EntryType שלו אינו תואם למה ש-FieldIndex מצפה | אשר שסימני FieldXE קיימים ושערכי EntryType שלהם מעוצבים באופן עקבי |
| תוצאות השדה נראות מיושנות לאחר עריכת התוכן | השדה לא עודכן לאחר העריכה | הפעל Update() על השדה (או UpdateFields() על ה-Document) |
| רשומות ממסמך אחר אינן נכללות בזמן ההידור | אין FieldRD המתייחס למסמך זה, או ש-IsPathRelative אינו תואם את האופן שבו הנתיב אמור להיפתר | הוסף FieldRD עם הגדרת FileName ו-IsPathRelative הנכונות |
FAQ
איך מוסיפים תוכן עניינים באופן תכנותי?
הפעל את DocumentBuilder.InsertTableOfContents(switches) עם מחרוזת מתג בסגנון Word, כגון "\o \"1-3\" \h \z \u", במיקום שבו יש להציג את תוכן העניינים.
איך אני מסמן טקסט כערך במפתח?
הכנס שדה FieldXE במיקום זה (לדוגמה דרך DocumentBuilder.InsertField) עם המאפיין Text שלו המוגדר לטקסט הערך; FieldIndex מקמפל את כל הסמנים FieldXE במסמך לתוצאה של האינדקס.
מה ההבדל בין FieldTC לבין ערכי TOC מבוססי כותרות?
התנהגות ברירת המחדל של TOC ב-Word אוספת פריטים מפסקאות באמצעות סגנונות כותרת. FieldTC מאפשרת לך לסמן מיקום שרירותי כפריט TOC באופן בלתי תלוי בסגנון הפסקה, ש-FieldToc יכולה לכלול באמצעות התאמת ערכי EntryIdentifier/TypeIdentifier.
איך מרענן תוכן עניינים או אינדקס לאחר שהמסמך השתנה?
הפעל את Update() על השדה הספציפי (למשל FieldToc.Update(), או FieldToc.UpdatePageNumbers() למספרי עמודים בלבד), או Document.UpdateFields() כדי לרענן כל שדה במסמך.
האם אני יכול לקמפל TOC או אינדקס על פני מסמכים מרובים?
כן — הוסף שדה FieldRD שמפנה לכל מסמך נוסף דרך FileName; שדה האיסוף (FieldToc, FieldIndex או FieldToa) כולל רשומות מהמסמכים המופנים כאשר הוא מתעדכן.
API Reference סיכום
| מחלקה/מתודה | תיאור |
|---|---|
Field | מחלקה בסיסית לכל סוגי השדות, כולל Start/Separator/End, Type, Update() |
DocumentBuilder.InsertTableOfContents(switches) | הכנס FieldToc באמצעות מתגים בסגנון Word של TOC |
FieldToc | מממש את שדה TOC (תוכן עניינים או טבלת האיורים) |
FieldTC | מסמן רשומת תוכן עניינים מותאמת במיקום ספציפי |
FieldIndex | מיישם את השדה INDEX, מרכיב סמנים FieldXE |
FieldXE | מסמן מיקום כערך אינדקס |
FieldToa | מיישם את השדה table-of-authorities, מרכיב סמנים FieldTA |
FieldTA | מסמן ציטוט עבור table of authorities |
FieldRD | מתייחס לתוכן של מסמך אחר בעת יצירת תוכן עניינים, אינדקס או טבלת רשויות |
FieldIndexFormat | Enum של סגנונות חזותיים מובנים של האינדקס ב-Word |