חלץ תוכן בין צמתים במסמך

בעבודה עם מסמכים, חשוב להיות מסוגלים לחלץ תוכן בקלות מטווח ספציפי בתוך מסמך. עם זאת, התוכן עשוי להיות מורכב מאלמנטים מורכבים כגון פסקאות, טבלאות, תמונות וכו'.

לא משנה איזה תוכן צריך לחלץ, השיטה לחלץ את התוכן הזה תמיד תיקבע על ידי אילו צמתים נבחרים לחלץ תוכן בין. אלה יכולים להיות גופי טקסט שלמים או ריצות טקסט פשוטות.

ישנם מצבים אפשריים רבים ולכן סוגים רבים ושונים של צמתים שיש לקחת בחשבון בעת חילוץ תוכן. לדוגמה, ייתכן שתרצה לחלץ תוכן בין:

  • שתי פסקאות ספציפיות
  • ריצות טקסט ספציפיות
  • שדות מסוגים שונים, כגון שדות מיזוג
  • טווחי התחלה וסיום של סימניה או תגובה
  • גופי טקסט שונים הכלולים בסעיפים נפרדים

במצבים מסוימים, ייתכן שתצטרך אפילו לשלב סוגי צמתים שונים, כגון חילוץ תוכן בין פסקה לשדה, או בין ריצה לסימניה.

מאמר זה מספק את יישום הקוד לחילוץ טקסט בין צמתים שונים, כמו גם דוגמאות לתרחישים נפוצים.

למה לחלץ תוכן

לעתים קרובות המטרה של חילוץ התוכן היא לשכפל או לשמור אותו בנפרד במסמך חדש. לדוגמה, אתה יכול לחלץ תוכן ו:

  • העתק אותו למסמך נפרד
  • המרת חלק מסוים של מסמך ל PDF או תמונה
  • שכפל את התוכן במסמך פעמים רבות
  • עבודה עם תוכן שחולץ בנפרד משאר המסמך

ניתן להשיג זאת בקלות באמצעות Aspose.Words ויישום הקוד למטה.

חילוץ אלגוריתם תוכן

הקוד בסעיף זה מתייחס לכל המצבים האפשריים שתוארו לעיל בשיטה אחת כללית וניתנת לשימוש חוזר. המתאר הכללי של טכניקה זו כרוך:

  1. איסוף הצמתים המכתיבים את שטח התוכן שיופק מהמסמך שלך. החזרת הצמתים האלה מטופלת על ידי המשתמש בקוד שלהם, בהתבסס על מה שהם רוצים להוציא.
  2. העברת הצמתים האלה לשיטת ExtractContent המוצגת להלן. אתה חייב גם לעבור פרמטר בוליאני אשר קובע אם צמתים אלה, מתנהג כמו סמנים, צריך להיכלל החילוץ או לא.
  3. אחזור רשימה של תוכן משובט (צמתים מועתקים) שצוין לחילוץ. אתה יכול להשתמש ברשימת צמתים זו בכל דרך ישימה, למשל, ליצור מסמך חדש המכיל רק את התוכן שנבחר.

כיצד לחלץ תוכן

כדי לחלץ את התוכן מהמסמך שלך עליך להתקשר לשיטת ExtractContent למטה ולהעביר את הפרמטרים המתאימים. הבסיס הבסיסי של שיטה זו כולל מציאת צמתים ברמת הבלוק (פסקאות וטבלאות) ושיבוטם ליצירת עותקים זהים. אם נקודות הסמן שעברו הן ברמת הבלוק, השיטה מסוגלת פשוט להעתיק את התוכן ברמה זו ולהוסיף אותו למערך.

עם זאת, אם נקודות הסמן הן בשורה (ילד של פסקה) אז המצב הופך מורכב יותר, שכן יש צורך לפצל את הפסקה בנקודה בשורה, בין אם זה ריצה, שדות סימניות וכו'. תוכן בצמתים האב המשובטים שאינם קיימים בין הסמנים מוסר. תהליך זה משמש כדי להבטיח שהצמתים המוטבעים עדיין ישמרו על העיצוב של פסקת האב. השיטה גם תפעיל בדיקות על הצמתים שהועברו כפרמטרים וזורקת חריג אם אחד הצמתים אינו חוקי. הפרמטרים שיש להעביר לשיטה זו הם:

  1. StartNode ו EndNode. שני הפרמטרים הראשונים הם הצמתים המגדירים היכן מיצוי התוכן אמור להתחיל ולסיים בהתאמה. הצמתים האלה יכולים להיות גם ברמת בלוק (פסקה, טבלה ) וגם ברמת קו (למשל ריצה, FieldStart, BookmarkStart וכו').):

    1. כדי להעביר שדה עליך להעביר את האובייקט FieldStart המתאים.
    2. כדי להעביר סימניות, יש להעביר את הצמתים BookmarkStart ו - BookmarkEnd.
    3. כדי להעביר הערות, יש להשתמש בצמתים CommentRangeStart ו - CommentRangeEnd.
  2. IsInclusive. מגדיר אם הסמנים כלולים בחילוץ או לא. אם אפשרות זו מוגדרת כשקר ואותו צומת או צמתים עוקבים מועברים, תוחזר רשימה ריקה:

    1. אם צומת FieldStart עובר אז אפשרות זו מגדירה אם כל השדה צריך להיות כלול או לא נכלל.
    2. אם מועבר צומת BookmarkStart או BookmarkEnd, אפשרות זו מגדירה אם הסימניה כלולה או רק את התוכן בין טווח הסימניות.
    3. אם מועבר צומת CommentRangeStart או CommentRangeEnd, אפשרות זו מגדירה אם יש לכלול את ההערה עצמה או רק את התוכן בטווח ההערות.

יישום השיטה ExtractContent אתה יכול למצוא כאן. שיטה זו תופנה בתרחישים במאמר זה.

אנו גם להגדיר שיטה מותאמת אישית כדי ליצור בקלות מסמך מן הצמתים שחולצו. שיטה זו משמשת ברבים מהתרחישים שלהלן ופשוט יוצרת מסמך חדש ומייבאת לתוכו את התוכן שחולץ.

דוגמת הקוד הבאה מראה כיצד לקחת רשימה של צמתים ולהכניס אותם למסמך חדש.

חלץ תוכן בין פסקאות

זה מדגים כיצד להשתמש בשיטה לעיל כדי לחלץ תוכן בין פסקאות ספציפיות. במקרה זה, אנחנו רוצים לחלץ את הגוף של המכתב נמצא במחצית הראשונה של המסמך. אנו יכולים לומר שזה בין הפסקאות 7 ל -11.

הקוד הבא מבצע משימה זו. הפסקאות המתאימות מופקות בשיטת GetChild במסמך ומעבירות את המדדים שצוינו. לאחר מכן אנו מעבירים את הצמתים הללו לשיטת ExtractContent ומצהירים כי יש לכלול אותם בחילוץ. שיטה זו תחזיר את התוכן המועתק בין צמתים אלה אשר מוכנסים לאחר מכן למסמך חדש.

דוגמת הקוד הבאה מראה כיצד לחלץ את התוכן בין פסקאות ספציפיות בשיטת ExtractContent לעיל:

חלץ תוכן בין סוגים שונים של צמתים

אנו יכולים לחלץ תוכן בין כל שילוב של צמתים ברמת בלוק או מוטבעים. בתרחיש זה להלן נחלץ את התוכן בין הפסקה הראשונה לטבלה בחלק השני באופן כולל. אנו מקבלים את צמתי הסמנים על ידי קריאה Body.FirstParagraph ו GetChild שיטה בחלק השני של המסמך כדי לאחזר את צמתי הפסקה והטבלה המתאימים. עבור וריאציה קלה בואו במקום לשכפל את התוכן ולהכניס אותו מתחת המקורי.

דוגמת הקוד הבאה מראה כיצד לחלץ את התוכן בין פסקה לטבלה בשיטת ExtractContent:

חלץ תוכן בין פסקאות על בסיס סגנון

ייתכן שיהיה עליך לחלץ את התוכן בין פסקאות של סגנונות זהים או שונים, כגון בין פסקאות המסומנות בסגנונות כותרת. הקוד שלהלן מראה כיצד להשיג זאת. זוהי דוגמה פשוטה שתוציא את התוכן בין הדוגמה הראשונה של סגנונות “Heading 1” ו “כותרת 3” מבלי להוציא גם את הכותרות. לשם כך אנו מגדירים את הפרמטר האחרון לשקר, המציין כי אין לכלול את צמתי הסמן.

ביישום נכון, יש להפעיל זאת בלולאה כדי לחלץ תוכן בין כל הפסקאות של סגנונות אלה מהמסמך. התוכן שחולץ מועתק למסמך חדש.

דוגמת הקוד הבאה מראה כיצד לחלץ תוכן בין פסקאות עם סגנונות ספציפיים בשיטת ExtractContent:

חלץ תוכן בין ריצות ספציפיות

ניתן לחלץ תוכן בין צמתים מוטבעים כגון Run גם כן. Runs מפסקאות שונות ניתן להעביר כסמנים. הקוד שלהלן מראה כיצד לחלץ טקסט ספציפי בין אותו צומת Paragraph.

דוגמת הקוד הבאה מראה כיצד לחלץ תוכן בין ריצות ספציפיות של אותה פסקה בשיטת ExtractContent:

חלץ תוכן באמצעות שדה

כדי להשתמש בשדה כסמן, יש להעביר את הצומת FieldStart. הפרמטר האחרון לשיטת ExtractContent יגדיר אם יש לכלול את כל השדה או לא. בואו נחלץ את התוכן בין שדה המיזוג “FullName " לפסקה במסמך. אנו משתמשים בשיטת MoveToMergeField של DocumentBuilder כיתה. פעולה זו תחזיר את הצומת FieldStart משם שדה המיזוג שהועבר אליו.

במקרה שלנו, בואו נקבע את הפרמטר האחרון שהועבר לשיטת ExtractContent לא נכון כדי להוציא את השדה מהחילוץ. אנו נעביר את התוכן שחולץ ל PDF.

דוגמת הקוד הבאה מראה כיצד לחלץ תוכן בין שדה מסוים לפסקה במסמך באמצעות שיטת ExtractContent:

חלץ תוכן מסימניה

במסמך, התוכן המוגדר בתוך סימניה מכוסה על ידי הצמתים BookmarkStart ו - BookmarkEnd. התוכן שנמצא בין שני הצמתים הללו מהווה את הסימנייה. אתה יכול להעביר את אחד הצמתים האלה כמו כל סמן, אפילו אלה מסימניות שונות, כל עוד סמן ההתחלה מופיע לפני סמן הסיום במסמך. אנו נחלץ תוכן זה למסמך חדש באמצעות הקוד שלהלן. האפשרות IsInclusive פרמטר מראה כיצד לשמור או לבטל את הסימנייה.

דוגמת הקוד הבאה מראה כיצד לחלץ את התוכן שהופנה לסימניה באמצעות שיטת ExtractContent:

חלץ תוכן מתוך תגובה

הערה מורכבת מהצמתים CommentRangeStart, CommentRangeEnd והערות. כל הצמתים האלה מוטבעים. שני הצמתים הראשונים מכסים את התוכן במסמך שאליו מתייחסת ההערה, כפי שניתן לראות בצילום המסך למטה.

הצומת Comment עצמה היא InlineStory שיכולה להכיל פסקאות וריצות. הוא מייצג את המסר של ההערה כפי שנראה כבועת תגובה בחלונית התצוגה המקדימה. כמו הצומת הזה הוא מוטבע צאצא של גוף אתה יכול גם לחלץ את התוכן מתוך הודעה זו גם כן.

ההערה מכסה את הכותרת, הפסקה הראשונה והטבלה בחלק השני. בואו נחלץ את ההערה הזו למסמך חדש. האפשרות IsInclusive קובעת אם ההערה עצמה נשמרת או מושלכת.

דוגמת הקוד הבאה מראה כיצד לעשות זאת:

כיצד לחלץ תוכן באמצעות DocumentVisitor

השתמש בכיתה DocumentVisitor כדי ליישם תרחיש שימוש זה. מחלקה זו תואמת את דפוס עיצוב המבקרים הידוע. באמצעות DocumentVisitor, ניתן להגדיר ולבצע פעולות מותאמות אישית הדורשות ספירה מעל עץ המסמך.

DocumentVisitor

כל שיטה DocumentVisitor.VisitXXX מחזירה ערך VisitorAction השולט בספירת הצמתים. אתה יכול לבקש להמשיך את הספירה, לדלג על הצומת הנוכחי (אבל להמשיך את הספירה), או להפסיק את ספירת הצמתים.

אלה השלבים שעליך לבצע כדי לקבוע ולחלץ באופן פרוגרמטי חלקים שונים במסמך:

  • צור מחלקה הנגזרת מ DocumentVisitor
  • לעקוף ולספק יישומים עבור חלק או את כל DocumentVisitor.VisitXXX שיטות לבצע כמה פעולות מותאמות אישית
  • התקשר Node.Accept בצומת שממנו ברצונך להתחיל את הספירה. לדוגמה, אם ברצונך למנות את המסמך כולו, השתמש ב Document.Accept

DocumentVisitor

דוגמה זו מראה כיצד להשתמש בתבנית המבקר כדי להוסיף פעולות חדשות למודל האובייקט Aspose.Words. במקרה זה, אנו יוצרים ממיר מסמכים פשוט לפורמט טקסט:

כיצד לחלץ טקסט בלבד

הדרכים לאחזור טקסט מהמסמך הן:

  • השתמש Document.Save עם SaveFormat.Text כדי לשמור כטקסט רגיל בקובץ או בזרם
  • השתמש Node.ToString והעביר את הפרמטר SaveFormat.Text. באופן פנימי, זה קורא לשמור כטקסט לזרם זיכרון ומחזיר את המחרוזת שהתקבלה
  • השתמש Node.GetText כדי לאחזר טקסט עם כל תווי הבקרה Microsoft Word כולל קודי שדה
  • יישום מותאם אישית DocumentVisitor לביצוע מיצוי מותאם אישית

באמצעות Node.GetText ו Node.ToString

מסמך Word יכול להכיל תווי בקרה המייעדים אלמנטים מיוחדים כגון שדה, סוף התא, סוף הקטע וכו'. הרשימה המלאה של תווי הבקרה האפשריים Word מוגדרת בכיתה ControlChar. השיטה Node.GetText מחזירה טקסט עם כל תווי תווי הבקרה הקיימים בצומת.

קריאה ToString מחזירה את ייצוג הטקסט הרגיל של המסמך רק ללא תווי בקרה.

דוגמת הקוד הבאה מראה את ההבדל בין קריאת השיטות GetText ו - ToString בצומת:

שימוש SaveFormat.Text

דוגמה זו שומרת את המסמך באופן הבא:

  • מסנן את תווי שדה וקודי שדה, צורה, הערת שוליים, הערת סיום והפניות תגובה
  • מחליף סוף פסקה ControlChar.Cr תווים עם ControlChar.CrLf שילובים
  • משתמש UTF8 קידוד

דוגמת הקוד הבאה מראה כיצד לשמור מסמך בפורמט TXT:

חלץ תמונות מצורות

ייתכן שיהיה עליך לחלץ תמונות מסמך כדי לבצע משימות מסוימות. Aspose.Words מאפשר לך לעשות זאת גם כן.

דוגמת הקוד הבאה מראה כיצד לחלץ תמונות ממסמך: