---
title: "כיצד לחלץ תוכן בין צמתים למסמכים"
---

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

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

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

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

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

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

```

דוגמאות אלה הן רק כמה הדגמות של האפשרויות הרבות. אנו מתכננים שהפונקציונליות של חילוץ הטקסט תהיה חלק מהציבור API בעתיד, ולא יידרש קוד נוסף. בינתיים, אל תהסס לפרסם את בקשותיך בנוגע לפונקציונליות זו ב [Aspose.Words פורום](https://forum.aspose.com/c/words/8).

```

## למה לחלץ תוכן

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

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

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

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

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

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

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

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

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

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

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

יישום השיטה **ExtractContent** אתה יכול למצוא [כאן](https://github.com/aspose-words/Aspose.Words-for-C/blob/master/Examples/DocsExamples/source/Programming%20with%20Documents/Contents%20Management/Extract%20content%20helper.h). שיטה זו תופנה בתרחישים במאמר זה.

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

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

{{< gist "aspose-words-gists" "922a9c5d9606a0c5cf0682b4aadfaf29" "generate-document.h" >}}

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

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

הקוד הבא מבצע משימה זו. הפסקאות המתאימות מופקות בשיטת [GetChild](https://reference.aspose.com/words/cpp/aspose.words/compositenode/getchild/) במסמך ומעבירות את המדדים שצוינו. לאחר מכן אנו מעבירים את הצמתים הללו לשיטת **ExtractContent** ומצהירים כי יש לכלול אותם בחילוץ. שיטה זו תחזיר את התוכן המועתק בין צמתים אלה אשר מוכנסים לאחר מכן למסמך חדש.

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

{{< gist "aspose-words-gists" "922a9c5d9606a0c5cf0682b4aadfaf29" "extract-content-between-paragraphs.h" >}}

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

אנו יכולים לחלץ תוכן בין כל שילוב של צמתים ברמת בלוק או מוטבעים. בתרחיש זה להלן נחלץ את התוכן בין הפסקה הראשונה לטבלה בחלק השני באופן כולל. אנו מקבלים את צמתי הסמנים על ידי קריאה `Body.FirstParagraph` ו [GetChild](https://reference.aspose.com/words/cpp/aspose.words/compositenode/getchild/) שיטה בחלק השני של המסמך כדי לאחזר את צמתי הפסקה והטבלה המתאימים. עבור וריאציה קלה בואו במקום לשכפל את התוכן ולהכניס אותו מתחת המקורי.

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

{{< gist "aspose-words-gists" "922a9c5d9606a0c5cf0682b4aadfaf29" "extract-content-between-block-level-nodes.h" >}}

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

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

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

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

{{< gist "aspose-words-gists" "922a9c5d9606a0c5cf0682b4aadfaf29" "extract-content-between-paragraph-styles.h" >}}

{{< gist "aspose-words-gists" "922a9c5d9606a0c5cf0682b4aadfaf29" "paragraphs-by-style-name.h" >}}

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

ניתן לחלץ תוכן בין צמתים מוטבעים כגון [Run](https://reference.aspose.com/words/cpp/aspose.words/run/) גם כן. **Runs** מפסקאות שונות ניתן להעביר כסמנים. הקוד שלהלן מראה כיצד לחלץ טקסט ספציפי בין אותו צומת **Paragraph**.

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

{{< gist "aspose-words-gists" "922a9c5d9606a0c5cf0682b4aadfaf29" "extract-content-between-runs.h" >}}

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

כדי להשתמש בשדה כסמן, יש להעביר את הצומת `FieldStart`. הפרמטר האחרון לשיטת `ExtractContent` יגדיר אם יש לכלול את כל השדה או לא. בואו נחלץ את התוכן בין שדה המיזוג "FullName " לפסקה במסמך. אנו משתמשים בשיטת [MoveToMergeField](https://reference.aspose.com/words/cpp/aspose.words/documentbuilder/movetomergefield/) של [DocumentBuilder](https://reference.aspose.com/words/cpp/aspose.words/documentbuilder/) כיתה. פעולה זו תחזיר את הצומת **FieldStart** משם שדה המיזוג שהועבר אליו.

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

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

{{< gist "aspose-words-gists" "922a9c5d9606a0c5cf0682b4aadfaf29" "extract-content-using-field.h" >}}

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

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

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

{{< gist "aspose-words-gists" "922a9c5d9606a0c5cf0682b4aadfaf29" "extract-content-between-bookmark.h" >}}

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

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

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

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

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

{{< gist "aspose-words-gists" "922a9c5d9606a0c5cf0682b4aadfaf29" "extract-content-between-comment-range.h" >}}

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

השתמש בכיתה [DocumentVisitor](https://reference.aspose.com/words/cpp/aspose.words/documentvisitor/) כדי ליישם תרחיש שימוש זה. מחלקה זו תואמת את דפוס עיצוב המבקרים הידוע. באמצעות **DocumentVisitor,** ניתן להגדיר ולבצע פעולות מותאמות אישית הדורשות ספירה מעל עץ המסמך.

**DocumentVisitor**

כל שיטה **DocumentVisitor.VisitXXX** מחזירה ערך [VisitorAction](https://reference.aspose.com/words/net/aspose.words/visitoraction/) השולט בספירת הצמתים. אתה יכול לבקש להמשיך את הספירה, לדלג על הצומת הנוכחי (אבל להמשיך את הספירה), או להפסיק את ספירת הצמתים.

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

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

**DocumentVisitor**

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

{{< gist "aspose-words-gists" "922a9c5d9606a0c5cf0682b4aadfaf29" "extract-content-using-document-visitor.h" >}}

{{< gist "aspose-words-gists" "922a9c5d9606a0c5cf0682b4aadfaf29" "convert-doc-to-txt.h" >}}

```

ניתן להוריד את קובץ המדגם של דוגמה זו מ [Aspose.Words GitHub](https://github.com/aspose-words/Aspose.Words-for-C/tree/master/Examples).

```

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

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

- השתמש [Document.Save](https://reference.aspose.com/words/cpp/aspose.words/document/save/) עם [SaveFormat.Text](https://reference.aspose.com/words/cpp/aspose.words/saveformat/) כדי לשמור כטקסט רגיל בקובץ או בזרם
- השתמש [Node.ToString](https://reference.aspose.com/words/cpp/aspose.words/node/tostring/) והעביר את הפרמטר **SaveFormat.Text**. באופן פנימי, זה קורא לשמור כטקסט לזרם זיכרון ומחזיר את המחרוזת שהתקבלה
- השתמש [Node.GetText](https://reference.aspose.com/words/cpp/aspose.words/node/gettext/) כדי לאחזר טקסט עם כל תווי הבקרה Microsoft Word כולל קודי שדה
- יישום מותאם אישית [DocumentVisitor](https://reference.aspose.com/words/cpp/aspose.words/documentvisitor/) לביצוע מיצוי מותאם אישית

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

מסמך Word יכול להכיל תווי בקרה המייעדים אלמנטים מיוחדים כגון שדה, סוף התא, סוף הקטע וכו'. הרשימה המלאה של תווי הבקרה האפשריים Word מוגדרת בכיתה [ControlChar](https://reference.aspose.com/words/cpp/aspose.words/controlchar/). השיטה **Node.GetText** מחזירה טקסט עם כל תווי תווי הבקרה הקיימים בצומת.

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

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

{{< gist "aspose-words-gists" "922a9c5d9606a0c5cf0682b4aadfaf29" "simple-extract-text.h" >}}

### שימוש `SaveFormat.Text`

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

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

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

{{< gist "aspose-words-gists" "922a9c5d9606a0c5cf0682b4aadfaf29" "docx-to-txt.h" >}}

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

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

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

{{< gist "aspose-words-gists" "922a9c5d9606a0c5cf0682b4aadfaf29" "extract-images.h" >}}
