Ich muss eine temporär dynamisch erzeugte Grafik drucken !?! (ASP.NET)



  • Ich habe eine Datenbank mit Bestellungen aus derer dynamisch eine Grafik erzeugt wird.Die Grafik zeigt wie hoch der prozentuale Anteil an Bestellungen eines Kunden angerechnet auf alle Bestellungen ist. Die Grafik wird in keine
    Datei gespeichert sondern direkt zum Client (Browser) geschickt. Funzt einwandfrei.

    Der Onlineshopbesitzer kann anhand der Grafik Rabatte verteilen.
    Da die generiert Webseite auch ausgedruckt werden muss, und zwar über den Browser, habe ich folgendes in den ASP - Script eingebaut:

    <A style="TEXT-DECORATION: none" href="java\1:window.print()"><asp:image id="Diagramm" Height="300px" Width="300px" AlternateText="Tortendiagramm" Runat="server"
    					ImageUrl="file:///C:\Inetpub\wwwroot\WebOnlineShop\WebForm2.aspx" BorderStyle="Dotted"
    					BorderColor="Black"></asp:image></A>
    

    Wenn der User bei seinem Browser aber Javascript deaktiviert hat wird

    <A style="TEXT-DECORATION: none" href="java\1:window.print()">...</A>
    

    denke ich, dann wird vorheriges nicht mehr funktionieren?!? 😕

    Jedenfalls auf meinem Entwicklungsrechner funzt die Grafik, Druckvorschau und
    das Druckergebnis sieht auch gut aus!

    Wie gesagt was ist wenn Javascript im Browser deaktiviert ist, bekomme ich die Grafik dann trotzdem ausgedruckt! Kann sein ich habe auch was nicht bedacht.
    Irgendwo fehlt mir da momentan das nötige Hintergrundwissen oder ich habe ein Brett vor meinem Kopf.

    Vielleicht kann mich da ja mal jemand aufklären zum ausdrucken von ASP - Seiten
    mit dynamisch generierten Grafiken 😕

    mfg sclearscreen 🙂

    P.S.: Ich habe keine Möglichkeit an ein Webcontrol ranzukommen was da vielleicht mit dem Drucken komfortabler ist. Habe die dynamische Grafikgenerierung zu Fuss gestaltet.



  • Irgendwo habe ich gelesen das man mittels Anweisung den Browser des User auch eine Webseite Cachen lassen kann. Würde das was bringen? Wenn Ja wo muss man das einbauen?

    geht das dann Serverseitig beim Response - Objekt?

    Etwa dort wo mit:

    Response.Write(...);
    

    bzw.
    hier an der Stelle in meinem Code:

    private void Page_Load(object sender, System.EventArgs e)
    		{
    			Bitmap b = null;
    			Graphics g = null;
    			try
    			{
    				// Hier Benutzercode zur Seiteninitialisierung einfügen
    				string sKundenCode = Request.QueryString["Kunde"].ToString();
    
    				// Anzahl aller Bestellungen eines bestimmten Kunden auslesen (Anzahl ermitteln = W) 
    				string sSeineBestellungen = Request.QueryString["SeineBestellungen"].ToString();
    
    				// Anzahl aller Bestellungen ermitteln (Grundwert = G)
    				string sAlleBestellungen = Request.QueryString["AlleBestellungen"].ToString();
    
    				// Bestellung in Prozent eines Kunden
    				// G/W = 100/p p = W * 100 / G
    				// p = dSeineBestellungen * 100.0 / dAlleBestellungen = [in prozent]
    
    				// Die Werte aus dem URL in entsprechend Typen konvertieren mit denen
    				// gerechnet werden kann
    				double dSeineBestellungen = Double.Parse(sSeineBestellungen);
    				double dAlleBestellungen = Double.Parse(sAlleBestellungen);
    
    				// Diese 2 Werte werden berechnet um wieder auf Hoehe und Breite des Bitmap
    				// prozentual umrechnen zu können sonst gelingt der Bargraph oder das Tortendiagramm nicht richtig
    				double p = dSeineBestellungen * 100.0 / dAlleBestellungen;
    
    				// Winkelberechnung für g.FillPie(...);
    				float fSweepAngel = (float)(p * 360.0 / 100.0);
    				float fRestAngel  = (float)(360.0 - fSweepAngel);
    
    				// Das dynamische Bitmap herstellen
    				b = new Bitmap(300,300);
    				g = Graphics.FromImage(b);
    				Font f = new Font("Italic",12.0f);
    				g.FillRectangle(Brushes.White,0,0,300,300);
    				g.FillPie(Brushes.Red,50,50,200,200,0.0F,fSweepAngel);
    				g.FillPie(Brushes.Blue,50,50,200,200,fSweepAngel,fRestAngel);
    
    				if(p.ToString().Length >= 5)
    					g.DrawString(p.ToString().Substring(0,5) + "%",f,Brushes.Red,20.0f,40.0f);
    				else
    					g.DrawString(p.ToString() + "%",f,Brushes.Red,20.0f,40.0f);
    
    				g.FillRectangle(Brushes.Blue,20.0f,250.0f,25.0f,25.0f);
    				g.DrawString("Die restlichen Kunden",f, Brushes.Blue, 70.0f, 255.0f);
    				b.Save(Response.OutputStream,ImageFormat.Jpeg);
    				g.Dispose();
    				b.Dispose();
    			}
    			catch(Exception ex)
    			{
    				Response.Write(ex.Message);
    			}
    			finally
    			{
    				g = null;
    				b = null;
    			}
    		}
    

    gearbeite wird?

    Das wäre dann an der Stelle in meinem Projekt wo ich meine Grafik zum Browser schicke. Kann es sein das dann hier der Ansatzpunkt wäre???

    mfg sclearscreen 🙂



  • Dein Javascript zum Drucken sagt ja dem Browser auch nur das er den Druckerdialog öffnen soll, mehr macht er ja auch nicht und das kann der User jederzeit auch durch das Menü des Browsers machen. Sehe da kein Problem.



  • Das funktioniert auch wenn der User JavaScript deaktiviert hat in seinem Brauser?



  • hmm sollte man dann eher auch nochmal mit einem Browser tun wo man das wirklich deaktiviert hat!

    Ist ja noch nicht in der entgültigen Testphase.

    mfg sclearscreen
    🙂
    Und Danke!


Anmelden zum Antworten