Um qualitativ hochwertige Berichte zu erstellen und sie korrekt in verschiedene Formate (PDF, Word, Excel usw.) zu exportieren, ist eine Grafik-Engine erforderlich. Ab den ersten .NET Framework Versionen verwendet Microsoft GDI+ und seinen Wrapper als Teil der System.Drawing-Bibliothek. FastReport .NET verwendet seit langem die gleiche Bibliothek, um schön gestaltete und funktionale Berichte zu erstellen. Das Mono-Team hat seine eigene Implementierung von GDI+ für Unix-Systeme entwickelt: libgdiplus, die in System.Drawing.Common eingesetzt wird. Aber auch diese Methode funktioniert nicht perfekt.
Leider funktioniert System.Drawing.Common im Gegensatz zu Windows auf anderen Plattformen sehr spezifisch. Zu den häufigen Problemen, mit denen unsere Benutzer konfrontiert sind, gehören falsche Größenberechnung des gerenderten Textes, fehlende RTL-Sprachunterstützung, falsche Wortabstände, falsche Silbentrennung im Satz, fehlende ARM-Prozessorunterstützung und allgemeine Instabilität von libgdiplus (Fehlermeldung wie “Out of memory”, Multi-Threading-Probleme).
Einige dieser Probleme werden gelöst, indem libgdiplus manuell aus dem Mono-Repository mit der Pango/Cairo-Unterstützung neu erstellt wird. In jedem Fall ist dies unpraktisch, insbesondere wenn Ihre Anwendung containerisiert ist. Die übrigen Probleme betreffen die Qualität der Berichtsexporte auf allen Betriebssystemen außer Windows.
Infolgedessen hat Microsoft offiziell die System.Drawing.Common-Unterstützung auf Nicht-Windows-Plattformen eingestellt. Hier ist ihre Veröffentlichung zu diesem Thema:“Breaking change: System.Drawing.Common only supported on Windows - .NET | Microsoft Docs“. Danach fragten sich unsere Benutzer, wie sie die leistungsstarken Funktionen von FastReport unter Linux oder macOS nutzen könnten.
Wir haben eine spezielle Version von FastReport.Core entwickelt, die Skia als Grafik-Engine und seinen .NET Wrapper, SkiaSharp, verwendet. Sie heißt FastReport.Core.Skia. Die Pakete FastReport.Core.Skia und FastReport.Web.Skia sind auf unserem privaten NuGet-Server verfügbar.
Falls Sie Probleme beim Rendern von Text unter Linux mit libgdiplus haben, empfehlen wir dringend FastReport.Core.Skia auszuprobieren. Um es in Ihrer Anwendung zu verwenden, ändern Sie einfach den Paketnamen FastReport.Core -> FastReport.Core.Skia, und fügen Sie die folgenden Pakete hinzu, damit sie unter Linux funktionieren (unter Windows und macOS werden die erforderlichen Pakete automatisch hinzugefügt):
- SkiaSharp.NativeAssets.Linux (NuGet).
- HarfBuzzSharp.NativeAssets.Linux (NuGet).
Lassen Sie uns FastReport.Core mit libgdiplus und FastReport.Core.Skia unter Linux/macOS vergleichen.
Schauen wir uns zunächst die fehlerhafte Berechnung der Textlänge nach dem Export in das HTML-Format unter Linux Ubuntu 20.04 an. In den folgenden Bildern können Sie sehen, wie selbst die neu erstellte libgdiplus mit Pango das Ende der Zeile 1 nicht korrekt anzeigt und einige Informationen verloren gehen, während Skia problemlos funktioniert.
Fehlerhafter HTML-Export unter Linux, libgdiplus + Pango
Korrekter HTML-Export unter Linux, SkiaSharp
Betrachten wir den Export des Unicode.frx-Berichts aus unserer Demo mit Texten in verschiedenen Sprachen. Leider funktioniert libgdiplus mit Pango auch nach dem Neuaufbau nicht mit RtL-Sprachen wie Hebräisch, Arabisch und anderen. FastReport.Core.Skia kann mit solchen Sprachen arbeiten.
Falscher PDF-Export eines RtL-Textes unter Linux, libgdiplus mit Pango hat den ganzen Text in eine Spalte über 8 Seiten geschrieben
Korrekter PDF-Export eines RtL-Textes unter Linux, SkiaSharp
Eine ähnliche Situation wird bei einigen orientalischen Sprachen beobachtet, für deren korrekte Darstellung eine spezielle Schriftart benötigt wird:
Falscher PDF-Export eines Textes unter Linux, libgdiplus mit Pango
Korrekter PDF Export eines Textes unter Linux, Skia. Für jeden Text wird automatisch eine passende Schriftart ausgewählt.
Testen wir FastReport.Core.Skia in einem bisher nicht unterstützten Szenario: auf Geräten mit ARM-Prozessoren wie Apple M1. Lassen Sie uns eine .NET 6-Konsolenanwendung erstellen (da nur .NET 6 eine native ARM-Unterstützung für macOS bietet) und den Simple List.frx-Bericht aus unserer Demo exportieren.
Abschließend sei daran erinnert, dass System.Drawing.Common ab Version 7.0 keine Nicht-Windows-Systeme mehr unterstützen wird, so dass die obigen Beispiele für libgdiplus bald nicht mehr funktionieren werden.
Diese Version von FastReport.Core kann nicht verwendet werden, wenn die System.Drawing-API verwendet wird: in einigen .NET Framework Projekten, NET Core 3.1/ NET 5+ WindowsForms Projekten sowie in Projekten mit System.Drawing.Common aufgrund der Besonderheiten dieser Änderung.
Testen Sie die neue Version von FastReport.Core mit der SkiaSharp-Unterstützung und genießen Sie alle seine Vorteile. Wenn Sie Fragen haben, wenden Sie sich bitte an unser Support-Team.