דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. c# איך לשלוח טקסט מעוצב למייל || איך להמיר richTextBox to html

c# איך לשלוח טקסט מעוצב למייל || איך להמיר richTextBox to html

מתוזמן נעוץ נעול הועבר תכנות
4 פוסטים 3 כותבים 259 צפיות 3 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • M מנותק
    M מנותק
    mekev
    כתב ב נערך לאחרונה על ידי
    #1

    שפת תכנות: c# winform

    שאלה מקורית:
    איך ניתן לשלוח טקסט מעוצב למייל
    (טקסט מעוצב = מודגש / גודל גופן / צבע גופן / קו תחתי)

    מה יש לי?
    יש לי richTextBox שאני מאפשר למשתמש לכתוב ולעצב את תוכן הטקסט
    ושולח את זה כגוף ההודעה באמצעות MailMessage

    mail.Body = richTextBox1.Text;
    mail.IsBodyHtml = true;
    

    וע"מ שהתוכן יגיע מעוצב למייל
    צריך 'להמיר' את הrichTextBox לHTML

    כגון:

     mail.Body = richTextBox1.Text.Replace("\n", "<br>\r\n").Replace(" ", "&nbsp;");          
    mail.IsBodyHtml = true;
    

    בהתחלה התפזרתי וניסיתי להגיע להמרה רוחבית כוללת של כל האפשריות (כולל תמונה / טבלאות וכד')
    זה גדול עלי בשלב זה
    ולא כ"כ נצרך עבורי כי אני מאפשר צירוף קובץ

    ניסתי להתמקד בלהמיר טקסט בלבד ולמספר אפשריות מצומצם

    1. גודל גופן (לאפשר שלושה גדלים בלבד)
    2. להדגיש (Bold)
    3. קו תחתון (Underline)
    4. צבע גופן (אדום/שחור/כחול)
    5. צבע רקע (צהוב / אדום)

    כך ש'בגדול' 'תאורטי' 'אולי' 'אפשר'
    לבצע המרה פשוטה של התווים באמצעות Replace

    אז מה השאלה?

    1. האם הנ"ל בכיוון הנכון (או שזה יותר דומה לבשל ביצה קשה בקומקום ולהכין חביתה על מגהץ)
    2. איך אני מקבל את המידע מrichTextBox מה העיצוב של כל תו
    dovidD D M 3 תגובות תגובה אחרונה
    0
    • M mekev

      שפת תכנות: c# winform

      שאלה מקורית:
      איך ניתן לשלוח טקסט מעוצב למייל
      (טקסט מעוצב = מודגש / גודל גופן / צבע גופן / קו תחתי)

      מה יש לי?
      יש לי richTextBox שאני מאפשר למשתמש לכתוב ולעצב את תוכן הטקסט
      ושולח את זה כגוף ההודעה באמצעות MailMessage

      mail.Body = richTextBox1.Text;
      mail.IsBodyHtml = true;
      

      וע"מ שהתוכן יגיע מעוצב למייל
      צריך 'להמיר' את הrichTextBox לHTML

      כגון:

       mail.Body = richTextBox1.Text.Replace("\n", "<br>\r\n").Replace(" ", "&nbsp;");          
      mail.IsBodyHtml = true;
      

      בהתחלה התפזרתי וניסיתי להגיע להמרה רוחבית כוללת של כל האפשריות (כולל תמונה / טבלאות וכד')
      זה גדול עלי בשלב זה
      ולא כ"כ נצרך עבורי כי אני מאפשר צירוף קובץ

      ניסתי להתמקד בלהמיר טקסט בלבד ולמספר אפשריות מצומצם

      1. גודל גופן (לאפשר שלושה גדלים בלבד)
      2. להדגיש (Bold)
      3. קו תחתון (Underline)
      4. צבע גופן (אדום/שחור/כחול)
      5. צבע רקע (צהוב / אדום)

      כך ש'בגדול' 'תאורטי' 'אולי' 'אפשר'
      לבצע המרה פשוטה של התווים באמצעות Replace

      אז מה השאלה?

      1. האם הנ"ל בכיוון הנכון (או שזה יותר דומה לבשל ביצה קשה בקומקום ולהכין חביתה על מגהץ)
      2. איך אני מקבל את המידע מrichTextBox מה העיצוב של כל תו
      dovidD מנותק
      dovidD מנותק
      dovid
      ניהול
      כתב ב נערך לאחרונה על ידי dovid
      #2

      @mekev חיפשתי בגוגל C# RTF TO HTML.
      הגעתי לתשובה בסטאק ששלחה לתשובה הזאת:
      https://stackoverflow.com/questions/439301/convert-rtf-to-html
      ממעבר על התשובות בחרתי בשניים:
      א. https://docs.microsoft.com/en-us/archive/blogs/jmstall/writing-an-rtf-to-html-converter-posting-code-in-blogs
      ניסיתי את זה, זה לא בשל לגמרי זה רק שלד טוב.

      ב. מאמר בcodeproject ששמו Writing Your Own RTF Converter
      לא היה לי כח לבדוק.

      בחיפוש של C# RTF2HTML מצאתי ספריה בגיטאב https://github.com/mkoertgen/Rtf2Html
      גם זה לא בדקתי.

      בקיצור מכל אלו אני הייתי ממשיך עם הראשון, להלן הקוד הרלוונטי:

      static string Escape(string st)
      {
          st = st.Replace("&", "&amp;");
          st = st.Replace("<", "&lt;");
          st = st.Replace(">", "&gt;");
          return st;
      }
      
      static void Format(TextWriter
      tw, string rtf)
      {
          tw.Write("<html><pre>");
          tw.Write("<span color=black>");
      
          int idx = 0;
          while (idx < rtf.Length)
          {
              // Get any text up to a '\'.
              Regex r1 = new Regex(@"(.*?)\\", RegexOptions.Singleline | RegexOptions.IgnoreCase);
              Match m = r1.Match(rtf, idx);
              if (m.Length == 0) break;
      
              // text will be empty if we have adjacent control words
              string stText = m.Groups[1].ToString();
              tw.Write(Escape(stText));
              idx += m.Length;
      
              // check for RTF escape characters. According to the spec, these are the only escaped chars.
              char chNext = rtf[idx];
              if (chNext == '{' || chNext == '}' || chNext == '\\')
              {
                  // Escaped char
                  tw.Write(chNext);
                  idx++;
                  continue;
              }
      
              // Must be a control char. @todo- delimeter includes more than just space, right?
              Regex r2 = new Regex(@"([\{a-z]+)([0-9]*) ", RegexOptions.Singleline | RegexOptions.IgnoreCase);
              m = r2.Match(rtf, idx);
              string stCtrlWord = m.Groups[1].ToString();
              string stCtrlParam = m.Groups[2].ToString();
      
              if (stCtrlWord == "cf")
              {
                  // Set font color.
                  int iColor = Int32.Parse(stCtrlParam);
                  tw.Write("</span>"); // close previous span, and start a new one for the given color.
                  tw.Write("<span style=\"color: " + m_colorTable[iColor] + "\">");
              }
              else if (stCtrlWord == "fs")
              {
                  // Sets font size. ignore
              }
              else
              {
                  //throw new ArgumentException("Unrecognized control word '" + stCtrlWord + stCtrlParam + "'after:" + stText);
              }
              idx += m.Length;
          }
          tw.Write(Escape(rtf.Substring(idx))); // rest of string
      
          tw.Write("</pre></html>");
      }
      
      static string[] m_colorTable = new string[]
          {
                     // rrGGbb
                      "#000000", // default, starts at index 0
                      "#000000", // real color table starts at index 1
                      "#0000FF",
                      "#00ffFF",
                      "#00FF00",
                      "#FF00FF",
                      "#FF0000",
                      "#FFFF00",
                      "#FFffFF",
                      "#000080",
                      "#008080",
                      "#008000",
                      "#800080",
                      "#800000",
                      "#808000",
                      "#808080",
                      "#c0c0c0"
          };
      

      כפי שאתה רואה הוא לא מימש את שינוי גודל הטקסט, ולפי מה שבדקתי יש הרבה דברים שהוא לא טיפל אבל הם לא דברים פשוטים שיש בפקד הrtf.
      אתה אמור לקרוא למתודה הזו ככה:

      using (var tw = new StreamWriter("output.html", false, Encoding.UTF8))
          Format(tw, richTextBox1.Rtf);
      

      אתה בעצם לא צריך קובץ אלא HTML כסטרינג, אז ככה:

      using (var mw = new MemoryStream())
      {
          using (var tw = new StreamWriter(mw, Encoding.UTF8))
              Format(tw, richTextBox1.Rtf);
      
          var html = Encoding.UTF8.GetString(mw.ToArray());
      }
      
      • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
      • בכל נושא אפשר ליצור קשר dovid@tchumim.com
      תגובה 1 תגובה אחרונה
      5
      • M mekev

        שפת תכנות: c# winform

        שאלה מקורית:
        איך ניתן לשלוח טקסט מעוצב למייל
        (טקסט מעוצב = מודגש / גודל גופן / צבע גופן / קו תחתי)

        מה יש לי?
        יש לי richTextBox שאני מאפשר למשתמש לכתוב ולעצב את תוכן הטקסט
        ושולח את זה כגוף ההודעה באמצעות MailMessage

        mail.Body = richTextBox1.Text;
        mail.IsBodyHtml = true;
        

        וע"מ שהתוכן יגיע מעוצב למייל
        צריך 'להמיר' את הrichTextBox לHTML

        כגון:

         mail.Body = richTextBox1.Text.Replace("\n", "<br>\r\n").Replace(" ", "&nbsp;");          
        mail.IsBodyHtml = true;
        

        בהתחלה התפזרתי וניסיתי להגיע להמרה רוחבית כוללת של כל האפשריות (כולל תמונה / טבלאות וכד')
        זה גדול עלי בשלב זה
        ולא כ"כ נצרך עבורי כי אני מאפשר צירוף קובץ

        ניסתי להתמקד בלהמיר טקסט בלבד ולמספר אפשריות מצומצם

        1. גודל גופן (לאפשר שלושה גדלים בלבד)
        2. להדגיש (Bold)
        3. קו תחתון (Underline)
        4. צבע גופן (אדום/שחור/כחול)
        5. צבע רקע (צהוב / אדום)

        כך ש'בגדול' 'תאורטי' 'אולי' 'אפשר'
        לבצע המרה פשוטה של התווים באמצעות Replace

        אז מה השאלה?

        1. האם הנ"ל בכיוון הנכון (או שזה יותר דומה לבשל ביצה קשה בקומקום ולהכין חביתה על מגהץ)
        2. איך אני מקבל את המידע מrichTextBox מה העיצוב של כל תו
        D מנותק
        D מנותק
        dotnet
        כתב ב נערך לאחרונה על ידי dotnet
        #3

        @mekev
        הכי קל להשתמש במה שאחרים כבר הכינו

        תסתכל פה:
        https://sautinsoft.com/products/rtf-to-html/how-to-convert-rtf-to-html-csharp.php

        או בספרייה ש @dovid הביא: Rtf2Html

        תגובה 1 תגובה אחרונה
        2
        • M mekev

          שפת תכנות: c# winform

          שאלה מקורית:
          איך ניתן לשלוח טקסט מעוצב למייל
          (טקסט מעוצב = מודגש / גודל גופן / צבע גופן / קו תחתי)

          מה יש לי?
          יש לי richTextBox שאני מאפשר למשתמש לכתוב ולעצב את תוכן הטקסט
          ושולח את זה כגוף ההודעה באמצעות MailMessage

          mail.Body = richTextBox1.Text;
          mail.IsBodyHtml = true;
          

          וע"מ שהתוכן יגיע מעוצב למייל
          צריך 'להמיר' את הrichTextBox לHTML

          כגון:

           mail.Body = richTextBox1.Text.Replace("\n", "<br>\r\n").Replace(" ", "&nbsp;");          
          mail.IsBodyHtml = true;
          

          בהתחלה התפזרתי וניסיתי להגיע להמרה רוחבית כוללת של כל האפשריות (כולל תמונה / טבלאות וכד')
          זה גדול עלי בשלב זה
          ולא כ"כ נצרך עבורי כי אני מאפשר צירוף קובץ

          ניסתי להתמקד בלהמיר טקסט בלבד ולמספר אפשריות מצומצם

          1. גודל גופן (לאפשר שלושה גדלים בלבד)
          2. להדגיש (Bold)
          3. קו תחתון (Underline)
          4. צבע גופן (אדום/שחור/כחול)
          5. צבע רקע (צהוב / אדום)

          כך ש'בגדול' 'תאורטי' 'אולי' 'אפשר'
          לבצע המרה פשוטה של התווים באמצעות Replace

          אז מה השאלה?

          1. האם הנ"ל בכיוון הנכון (או שזה יותר דומה לבשל ביצה קשה בקומקום ולהכין חביתה על מגהץ)
          2. איך אני מקבל את המידע מrichTextBox מה העיצוב של כל תו
          M מנותק
          M מנותק
          mekev
          כתב ב נערך לאחרונה על ידי
          #4

          @mekev
          עדכון:
          מישהו לחש על אוזני לעשות חיפוש פשוט בNuGet
          והספריה הראשונה פשוט עבדה.....

          7c1faf60-1880-43ad-8c42-3bc9b38b3bb7-image.png

          תגובה 1 תגובה אחרונה
          6
          • dovidD dovid העביר נושא זה מ-תכנות ב-
          תגובה
          • תגובה כנושא
          התחברו כדי לפרסם תגובה
          • מהישן לחדש
          • מהחדש לישן
          • הכי הרבה הצבעות


          בא תתחבר לדף היומי!
          • התחברות

          • אין לך חשבון עדיין? הרשמה

          • התחברו או הירשמו כדי לחפש.
          • פוסט ראשון
            פוסט אחרון
          0
          • דף הבית
          • קטגוריות
          • פוסטים אחרונים
          • משתמשים
          • חיפוש
          • חוקי הפורום