2017-02-24 13 views
11

Chcę utworzyć wykres liniowy podobny poniżej:Wykres liniowy generowanego obrazu, która zostanie wysłana za pośrednictwem poczty elektronicznej

Line Chart

Zastanawiam się tylko, czy są dostępne ramy lub API dostępne w ASP.NET MVC, który generuje obrazy wykresów, ponieważ moim celem jest wysłanie tego przez e-mail. Zastanawiam się, czy mogę po prostu umieścić coś w rodzaju <img src="http://imageapi.com?date1=20170101&date=20170130" />, a następnie api będzie obsługiwać generowanie obrazu wykresu.

Po wyszukaniu znalazłem wiele schematów wykresów przy użyciu javascript, ale wątpię, czy będzie poprawnie działać na różnych klientach poczty e-mail.

Wielkie dzięki!

+2

Czy próbowałeś html e-mail? – VMAtm

+0

co to znaczy e-mail HTML? – Sherwin

+1

Usługi SQL Server Reporting Services mogą tworzyć tego rodzaju raporty na żądanie lub dostarczane pocztą e-mail w ramach subskrypcji –

Odpowiedz

6

Google Image Charts zrobi. Przekaż dane i ustawienia wyświetlania za pośrednictwem adresu URL, a następnie zwróci obraz.

np.

<img src="https://chart.googleapis.com/chart?cht=lc&chd=t:30,10,45,38,25|10,20,10,20,10&chls=2.0,0.0,0.0&chs=200x125&chg=0,20,3,3,10,20&chxt=x,y&chxl=0:|Week1|Week2|Week3|Week4|Week5|1:|0|20|40|60|80|100&chs=800x300&chm=o,ff9900,0,-1,10.0|d,ff0000,1,-1,10.0&chco=FFC6A5,DEBDDE&chdl=Click|GRU" /> 

produkuje ten wykres:

Stanowią one zabaw dla testowania: https://developers.google.com/chart/image/docs/chart_playground

Należy jednak pamiętać, że Google nie utrzymujemy ją dalej, ale nie zamierza usunąć tę funkcjonalność :

Podczas gdy dynamika i interaktywne Mapy Google są aktywnie utrzymywane, oficjalnie wycofaliśmy statyczne Mapy Google w 2012 roku. Daje nam to prawo do wyłączenia go bez uprzedzenia, chociaż nie mamy takich planów.

+0

Uwaga, możliwe jest dodanie prawej osi dla swoich wartości procentowych również –

+0

To jest fajne, nie wiedziałem, że Google ma coś takiego. Pozwoli mi to zaoszczędzić wiele czasu w rozwoju. xD – Sherwin

1

Jaki jest twój projekt? Twój wykres musi zostać wygenerowany na stronie internetowej, a następnie musi mieć wygenerowany html. Jeśli nie jest generowany HTML i generowany jest tylko obraz, to jest to najlepsze. teraz można wysłać tę samą treść w.

Jeśli obraz nie jest generowany ponownie masz 2 opcja tutaj i) Wyślij kompletną html w treści wiadomości wraz z niepokojem js/css ii) można przekonwertować te html do obrazu za pomocą (powiedz C#), a następnie wysłać pocztę.

Podaj swój pełny scenariusz.

1
  1. Istnieją różne typy wykresów API dostępne na rynku, zarówno open source i licencjonowany, można użyć dowolny wygenerować wykres/diagram na stronie i można wysłać tę stronę jako załącznik e-mail za pomocą następującego kodu .

    [HttpPost] 
    public ActionResult SendWebPageAsAttachment() 
    { 
        var subject = Request.Form["subject"]; // You can provide subject from page or code 
        var mailContent = Request.Form["bodyInnerHTML"]; // get the body inner HTML by form name 
    
        var Body = "<div style='background-color:white;'>" + Request.Form["mailContent"] + "</div>"; // Email Body 
        var attachmentName = DateTime.Now.ToString("yyyy/MM/dd").Replace("/", "-") + "_" + 
         DateTime.Now.ToLongTimeString().Replace(" ", "_") + ".html"; // Attachment Name 
    
        var baseUrl = HttpContext.Request.Url.Scheme + "://" + HttpContext.Request.Url.Authority + 
         HttpContext.Request.ApplicationPath.TrimEnd('/') + '/'; // Base URL 
        string src = @"src="""; 
    
        mailContent = mailContent.Replace(src, src + baseUrl.Remove(baseUrl.Length - 1)); 
        mailContent = "<html><head><link href='" + baseUrl + "Themes/styles.css' rel='stylesheet' type='text/css' /><link href='" + 
         baseUrl + "Themes/style.css' rel='stylesheet' type='text/css' /></head><body>" + WebUtility.HtmlDecode(mailContent) + 
         "</body></html>"; 
        try 
        { 
         SmtpClient smtpClient = new SmtpClient("mail.MyWebsiteDomainName.com", 25); 
         smtpClient.Credentials = new System.Net.NetworkCredential("[email protected]", "myIDPassword"); 
         smtpClient.UseDefaultCredentials = true; 
         smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network; 
         smtpClient.EnableSsl = true; 
         MailMessage mail = new MailMessage(); 
    
         //Setting From , To and CC 
         mail.From = new MailAddress("[email protected]", "MyWeb Site"); 
         mail.To.Add(new MailAddress("[email protected]")); 
         mail.CC.Add(new MailAddress("[email protected]")); 
    
         mail.IsBodyHtml = true; 
         mail.Subject = subject; 
         mail.Body = Body; 
    
         var mailDataBytes = ASCIIEncoding.Default.GetBytes(mailContent); 
         var mailStream = new MemoryStream(mailDataBytes); 
         mail.Attachments.Add(new Attachment(mailStream, attachmentName)); 
         smtpClient.Send(mail); 
        } 
        catch (Exception ex) 
        { 
         //catch 
        } 
        ViewBag.IsHttpPost = true; 
        return View("SendWebPageAsAttachment"); 
    } 
    
+0

Dzięki za to. :) – Sherwin

Powiązane problemy