none
שמירת תוכן מעוצב בפקד RICH TEXT BOX בWPF RRS feed

  • שאלה

  • שלום,

    יש לי פקד RICH TEXT BOX לעיצוב טקסט,(BOLD, SIZE, FONT-FAMILY) 

    איך אני שומרת את העיצוב של המשתמש (הטקסט שבRTB) -כך שכאשר אני שומרת את התוכן של הRTB בקובץ ישמר לי גם העיצוב?

    נתקלתי בקובץ RTF, השאלה שלי האם זה נכון להשתמש בצורה הזו, ואיך זה מסתדר אם אני שומרת את התוכן בDATA BASE?

    (אם אני שומרת במסד נתונים אני לא צריכה לשמור בקובץ RTF,  האם אפשר לשמור רק במסד נתונים עם העיצוב? ואם כן  איך מבצעים את זה?)


    יום שני 27 אוקטובר 2014 16:14

תשובות

  • הפקד RichTextBox של WPF מחזיק את התוכן במאפיין בשם Document שהוא מסוג FlowDocument.

    מכאן ששמירה לדיסק היא קוד לשמירה וטעינה של FlowDocument לדיסק, ככה:

    // Save 
    var source = YourRTB.Document;
    var range = new TextRange(source.ContentStart, source.ContentEnd);
    using (var stream = File.Create("output.pak"))
    {
        range.Save(stream, DataFormats.XamlPackage);
    }
     
     
     
    // Load
    using(var stream = File.OpenRead("output.pak"))
    {
        var target = YourRTB.Document;
        var range = new TextRange(target.ContentStart, target.ContentEnd);
        range.Load(stream, DataFormats.XamlPackage);    
    }

    נעזרתי בקוד מכאן: http://wpftutorial.net/FlowDocuments.html


    • נערך על-ידי לומדים יום שלישי 28 אוקטובר 2014 09:50
    • הוצע כתשובה על-ידי Eran Sharvit יום שלישי 28 אוקטובר 2014 12:42
    • סומן כתשובה על-ידי Eran Sharvit יום ראשון 02 נובמבר 2014 11:53
    יום שלישי 28 אוקטובר 2014 09:49
  • צהריים טובים

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

    אפשרות שנייה מאוד נפוצה היא לבצע המרה של התוכן ל HTML ולשמור את התוכן של ה HTML במסד הנתונים כשרשרת פשוטה.

    אפשרות נוספת תוכלי לראות כאן:

    http://www.codeproject.com/Questions/576956/Storingplusdataplusofplusrichplustextplusboxplusto

    http://www.codeproject.com/Articles/12932/Saving-and-Restoring-RichTextBox-Formatted-Text-Al

    בעקרון את צריכה לעבוד עם 

    string rtfText = this.richTextBox1.Rtf


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]


    • נערך על-ידי pituachMVP, Moderator יום שלישי 28 אוקטובר 2014 13:35
    • סומן כתשובה על-ידי Eran Sharvit יום ראשון 02 נובמבר 2014 11:53
    יום שלישי 28 אוקטובר 2014 13:29
    מנחה דיון

כל התגובות

  • הפקד RichTextBox של WPF מחזיק את התוכן במאפיין בשם Document שהוא מסוג FlowDocument.

    מכאן ששמירה לדיסק היא קוד לשמירה וטעינה של FlowDocument לדיסק, ככה:

    // Save 
    var source = YourRTB.Document;
    var range = new TextRange(source.ContentStart, source.ContentEnd);
    using (var stream = File.Create("output.pak"))
    {
        range.Save(stream, DataFormats.XamlPackage);
    }
     
     
     
    // Load
    using(var stream = File.OpenRead("output.pak"))
    {
        var target = YourRTB.Document;
        var range = new TextRange(target.ContentStart, target.ContentEnd);
        range.Load(stream, DataFormats.XamlPackage);    
    }

    נעזרתי בקוד מכאן: http://wpftutorial.net/FlowDocuments.html


    • נערך על-ידי לומדים יום שלישי 28 אוקטובר 2014 09:50
    • הוצע כתשובה על-ידי Eran Sharvit יום שלישי 28 אוקטובר 2014 12:42
    • סומן כתשובה על-ידי Eran Sharvit יום ראשון 02 נובמבר 2014 11:53
    יום שלישי 28 אוקטובר 2014 09:49
  • תודה על התגובה,

    אבל עדיין לא עונה לי על השאלה: האם אני יכולה לשמור את הטקסט המעוצב שבRTB  למסד נתונים כמו SQL כך שאוכל להטעין את התוכן מהמסד נתונים בחזרה לRTB באותו מצב ששמרתי אותו(שישמר העיצוב),איך אני עושה את זה?

    אני רוצה לשמור במסד נתונים כמו SQL ולא בקובץ כמו שכתבת למעלה "(file.Creat("output.pak"

    או שכדי לשמור את העיצוב במסד נתונים צריך לשמור קודם באיזה שהוא קובץ, ואם כן עם איזה סיומת?(כמו RTF, מה זה סיומת PAK? )

    אשמח לפרוט, 

    תודה

    יום שלישי 28 אוקטובר 2014 13:11
  • צהריים טובים

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

    אפשרות שנייה מאוד נפוצה היא לבצע המרה של התוכן ל HTML ולשמור את התוכן של ה HTML במסד הנתונים כשרשרת פשוטה.

    אפשרות נוספת תוכלי לראות כאן:

    http://www.codeproject.com/Questions/576956/Storingplusdataplusofplusrichplustextplusboxplusto

    http://www.codeproject.com/Articles/12932/Saving-and-Restoring-RichTextBox-Formatted-Text-Al

    בעקרון את צריכה לעבוד עם 

    string rtfText = this.richTextBox1.Rtf


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]


    • נערך על-ידי pituachMVP, Moderator יום שלישי 28 אוקטובר 2014 13:35
    • סומן כתשובה על-ידי Eran Sharvit יום ראשון 02 נובמבר 2014 11:53
    יום שלישי 28 אוקטובר 2014 13:29
    מנחה דיון
  • סליחה, לא שמתי לב שזה למסד נתונים. את יכולה לעשות כמו שפיתוח הציע, במקום Stream של קובץ להשתמש בMemoryStream ככה:

    // Save 
    var source = YourRTB.Document;
    var range = new TextRange(source.ContentStart, source.ContentEnd);
    
    using (MemoryStream stream = new MemoryStream())
    {
        range.Save(stream, DataFormats.XamlPackage);
        byte[] bytesForSaveInDb = stream.ToArray();
       //Save bytesForSaveInDb in your DataBase here, as binary field.
    }
     
     
    // Load
    byte[] input = //load bytes from db
    using(var stream = MemoryStream (input))
    {
        var target = YourRTB.Document;
        var range = new TextRange(target.ContentStart, target.ContentEnd);
        range.Load(stream, DataFormats.XamlPackage);    
    }

    השדה במסד צריך להיות מסוג varbinary.




    • נערך על-ידי לומדים יום חמישי 30 אוקטובר 2014 13:17
    יום רביעי 29 אוקטובר 2014 14:02
  • היכן אנחנו עומדים בעיניין השאלה someone0

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


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]

    שבת 01 נובמבר 2014 19:53
    מנחה דיון