Blog

JFreeChart in .NET verwenden - Helfen Sie mir, diese illegale Heirat zu verhindern

Balaji D Loganathan

Aktualisiert Oktober 23, 2025
4 Minuten

Ich versuche, Jfreechart in .NET zu verwenden, und ich brauche jemanden, der mir hilft, das Problem zu lösen. Wenn Sie etwas Zeit haben und sich für solche verrückten Dinge interessieren, hinterlassen Sie bitte einen Kommentar, damit wir versuchen können, es zum Laufen zu bringen. Ja, das ist kein Scherz.

Zuvor habe ich Apache FOP in ASP.NET (vb.net) verwendet, um PDFs on the fly zu generieren. Das habe ich getan, weil es keinen kostenlosen und einfach zu bedienenden Generator für PDF-Inhalte für .NET gab. Wenn Sie wissen möchten, wie Sie Apache FOP in .NET verwenden können, dann klicken Sie bitte auf den Link Apache FOP von .NET aufrufen. Wenn Sie das mit FOP aus .NET heraus generierte PDF sehen möchten, klicken Sie bitte auf diesen Link. Sie können eigenständige Java-Pakete wie Xalan, Apache FOP, Servlet usw. in .NET mit IKVM verwenden. IKVM ist eine .NET-Implementierung von Java. IKVM kann die Java jar-Dateien in .NET dll-Dateien konvertieren, die Sie als Referenz in Ihr .NET-Projekt importieren und wie Java-Klassen verwenden können. Zum Beispiel Die Apache FOP Jars können nach der Konvertierung in .ddl wie folgt verwendet werden. [vbnet] Versuchen Sie AppDomain.CurrentDomain.Load("xercesImpl-2.2.1") AppDomain.CurrentDomain.Load("batik") java.lang.System.setProperty("javax.xml.parsers.SAXParserFactory", "org.apache.xerces.jaxp.SAXParserFactoryImpl") Dim filename As String = generateXSLFO() Dim isrc As org.xml.sax.InputSource = New org.xml.sax.InputSource(Dateiname & ".fo") Dim fs As java.io.FileOutputStream = New java.io.FileOutputStream(Dateiname & ".pdf") Dim driver As Driver = New Driver(isrc, fs) ' driver.setLogger(cl) driver.setRenderer(driver.RENDER_PDF) driver.run() fs.close() Label1.Text = "erledigt" System.IO.File.Delete(Dateiname & ".xml") System.IO.File.Delete(Dateiname & ".fo") Catch ex As Exception Label1.Text = ex.ToString Versuch beenden [/vbnet] Der erste Schritt zur Verwendung von Jfreechart in .NET ist die Konvertierung in .dll's. Laden Sie dazu bitte ikvm herunter und installieren Sie es auf Ihrem PC. Laden Sie auch die jfreechart lib's auf Ihren PC herunter. Gehen Sie in das bin-Verzeichnis der ikvm-Installation und führen Sie die folgenden Befehle aus. (Damit der Befehl funktioniert, gehe ich davon aus, dass sich die Dateien wie jfreechart-1.0.5.jar, servlet.jar und jcommon-1.0.9.jar im bin-Verzeichnis befinden) . [as]ikvmc -target:library -reference:/usr/lib/IKVM.GNU.Classpath.dll servlet.jar ikvmc -target:library -reference:/usr/lib/IKVM.GNU.Classpath.dll -reference:servlet.dll jcommon-1.0.9.jar ikvmc -target:library -reference:/usr/lib/IKVM.GNU.Classpath.dll -reference:servlet.dll reference:jcommon-1.0.9.dll jfreechart-1.0.5.jar[/as] Dadurch werden .dll-Dateien von jfreechart, jcommon und servlet generiert. Starten Sie nun in Ihrer VS.NET IDE ein neues asp.net-Webanwendungsprojekt mit C# als Backend-Code. Fügen Sie die neu generierte dll als Referenzen zum Projekt hinzu. Fügen Sie auch die dll-Dateien IKVM.AWT.WinForms.dll IKVM.GNU.Classpath.dll IKVM.Runtime.dll als Referenz zu Ihrem Projekt hinzu. Wenn Sie den Screenshot meiner IDE (VS.NET 2003) mit den hinzugefügten Referenzen sehen möchten, klicken Sie bitte hier. Sobald Sie mit den obigen Aufgaben fertig sind, beginnen Sie mit dem Schreiben des C#-Codes, um Jfreechart von .NET aus aufzurufen. Hier ist der Codeschnipsel, der beim Klicken einer Schaltfläche auf einer Webseite aufgerufen wird. [csharp] mit ikvm.lang; mit org.jfree.chart; mit javax.servlet.http; mit org.jfree.data.category; mit ikvm.awt; mit ikvm.@internal; private void Button1_Click(object sender, System.EventArgs e) { Versuchen Sie { AppDomain.CurrentDomain.Load("jcommon-1.0.9"); org.jfree.data.general.DefaultPieDataset myDataSet=new org.jfree.data.general.DefaultPieDataset(); myDataSet.setValue("Akzeptiert", 100); myDataSet.setValue("Abgelehnt", 200); JFreeChart pieChart=ChartFactory.createPieChart("Total requests: 300", myDataSet,true,true,true); pieChart.setBackgroundPaint(java.awt.Color.white); pieChart.setBorderVisible(false); ChartRenderingInfo thisImageMapInfo=new ChartRenderingInfo(); java.io.OutputStream jos = new java.io.FileOutputStream("C:/Inetpub/wwwroot/csharp_jfree/test.jpeg"); ChartUtilities.writeChartAsJPEG(jos,100,pieChart,240,230,thisImageMapInfo); Label1.Text = "ok"; } catch(Exception exp) { Label1.Text = exp.ToString(); } } [/csharp] Sobald Sie die Webanwendung kompiliert und bereitgestellt haben, klicken Sie bitte auf die Schaltfläche, die den Code ausführt, um das JfreeChart zu generieren. Bei der Ausführung des Codes wird die folgende Fehlermeldung ausgegeben.

System.NotImplementedException: Die Methode oder Operation ist nicht implementiert. at ikvm.awt.NetGraphicsEnvironment.createGraphics(BufferedImage bi) at java.awt.image.BufferedImage.createGraphics() at org.jfree.chart.JFreeChart.createBufferedImage(Int32 width, Int32 height, Int32 imageType, ChartRenderingInfo info) at org.jfree.chart.JFreeChart.createBufferedImage(Int32 width, Int32 height, ChartRenderingInfo info) at org.jfree.chart.ChartUtilities.writeChartAsJPEG(OutputStream out, Single quality, JFreeChart chart, Int32 width, Int32 height, ChartRenderingInfo info) at csjfree.WebForm1.Button1_Click(Object sender, EventArgs e) in c:inetpubwwwrootcsjfreewebform1.aspx.cs:line 72

Das Problem ist, dass IKVM.AWT nicht vollständig mit Java AWT-Funktionen implementiert ist. Der Autor von IKVM weist auf seiner Website auch darauf hin. Jetzt frage ich mich, wie ich diesen Fehler loswerden und jfreechart in asp.net nutzen kann. Ich dachte an Folgendes

  • Ersetzen der ikvm.awt dll durch eine andere, gleichwertige java Awt dll.
  • Nutzen Sie das .NET MFC Bildrendering und geben Sie es an Jfree Chart weiter (ich weiß nicht, wie man das macht)

Also noch einmal: Wenn Sie etwas Zeit haben und Interesse daran haben, solche verrückten Dinge zu tun, hinterlassen Sie bitte einen Kommentar, damit wir versuchen können, dies zum Laufen zu bringen.

Verfasst von

Balaji D Loganathan

Working as a Senior Consultant at Xebia India IT Architects Private Limited, Gurgaon, India.

Contact

Let’s discuss how we can support your journey.