להחליף שדות עם טקסט סטטי

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

הדיאגרמה למטה מראה כיצד IF שדה נשמר במסמך:

  • הטקסט מוקף בצומת שדה מיוחד - FieldStart ו FieldEnd
  • FieldSeparator Node מפריד את הטקסט בתוך השדה לתוך קוד השדה ותוצאה שדה
  • קוד השדה מגדיר את ההתנהגות הכללית של התחום, בעוד שתוצאת השדה שומרת על התוצאה האחרונה כאשר שדה זה עודכן באמצעות שימוש Microsoft Word או Aspose.Words
  • התוצאה של השדה היא מה מאוחסן בתחום ומוצג במסמך בעת צפייה

update-remove-a-field-aspose-words

ניתן לראות גם את המבנה מתחת בצורת היררכי באמצעות פרויקט ההדגמה “DocumentExplorer”, ספינות עם Aspose.Words ההתקנה.

update-remove-a-field-aspose-words-2

שדות שלא ניתן להחליף באמצעות טקסט

הצבת שדה עם טקסט סטטי לא עובד כראוי עבור כמה שדות בראש או רגל.

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

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

דוגמה לקוד הבא מראה כיצד להחליף את השדה עם התוצאה האחרונה:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
Document doc = new Document(getMyDir() + "Linked fields.docx");
doc.unlinkFields();

המרת סוגי שדה מסוימים ב- Specific Document Parts

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

לדוגמה, אתה יכול להעביר Document אובייקט וממיר שדות של הסוג שצוין מן המסמך כולו לטקסט סטטי, או שאתה יכול להעביר את Body אובייקט של סעיף וממיר רק את השדות שנמצאו בגוף זה.

The The The FieldType ההארה עברה ConvertFieldsToStaticText שיטה מפרטת איזה סוג של שדות יש להמיר לטקסט סטטי. כל סוג אחר שנמצא במסמך יישאר ללא שינוי.

הדוגמה הבאה של הקוד מראה כיצד לבחור שדות מסוג מסוים - targetFieldType בצומת מסוים - compositeNode ואז להמיר אותם לטקסט סטטי:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
private static class FieldsHelper extends DocumentVisitor {
/**
* Converts any fields of the specified type found in the descendants of the node into static text.
*
* @param compositeNode The node in which all descendants of the specified FieldType will be converted to static text.
* @param targetFieldType The FieldType of the field to convert to static text.
*/
public static void convertFieldsToStaticText(CompositeNode compositeNode, int targetFieldType) throws Exception {
for (Field field : compositeNode.getRange().getFields())
{
if (field.getType() == targetFieldType)
{
field.unlink();
}
}
}
}

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

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
Document doc = new Document(getMyDir() + "Linked fields.docx");
// Pass the appropriate parameters to convert all IF fields encountered in the document (including headers and footers) to text.
for (Field field : doc.getRange().getFields()) {
if (field.getType() == FieldType.FIELD_IF) {
field.unlink();
}
}
doc.save(getArtifactsDir() + "WorkingWithFields.ConvertFieldsInDocument.docx");

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

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
Document doc = new Document(getMyDir() + "Linked fields.docx");
// Pass the appropriate parameters to convert PAGE fields encountered to text only in the body of the first section.
for (Field field : doc.getRange().getFields()) {
if (field.getType() == FieldType.FIELD_PAGE) {
field.unlink();
}
}
doc.save(getArtifactsDir() + "WorkingWithFields.ConvertFieldsInBody.docx");

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

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
Document doc = new Document(getMyDir() + "Linked fields.docx");
// Pass the appropriate parameters to convert all IF fields to text that are encountered only in the last
// paragraph of the document.
for (Field field : doc.getFirstSection().getBody().getLastParagraph().getRange().getFields()) {
if (field.getType() == FieldType.FIELD_IF) {
field.unlink();
}
}
doc.save(getArtifactsDir() + "WorkingWithFields.TestFile.docx");