Linux, macOS und Docker | Aspose.TeX für .NET

Das richtige Paket wählen

Aspose.TeX für .NET wird als zwei NuGet-Pakete mit derselben API und derselben Versionsnummer veröffentlicht:

PaketGrafik-BackendWindowsLinux, macOSZielframeworks
Aspose.TeXSystem.Drawing.Common (GDI+)JaNein.NET Framework 4.0, .NET Standard 2.0, .NET 6.0, .NET 7.0
Aspose.TeX.DrawingAspose.Drawing (verwaltet, im Paket enthalten)JaJa.NET Standard 2.0, .NET 7.0

Ab .NET 6 unterstützt Microsoft System.Drawing.Common nur unter Windows. Verwendet Ihre Anwendung das Paket Aspose.TeX unter Linux oder macOS, schlägt sie fehl, sobald sie etwas rendert:

1System.PlatformNotSupportedException: System.Drawing.Common is not supported on this platform.

Verwenden Sie Aspose.TeX.Drawing, wenn Ihre Anwendung unter Linux, macOS, in Docker-Containern oder in anderen Umgebungen außer Windows läuft. Das Paket funktioniert auch unter Windows. Wenn Sie eine Anwendung für mehrere Plattformen erstellen, können Sie es also überall verwenden.

Aspose.TeX.Drawing hängt weder von System.Drawing.Common noch von libgdiplus ab. Das Grafik-Backend Aspose.Drawing ist in Aspose.TeX.dll eingebettet, sodass das Paket Ihrer Anwendung eine einzige Assembly hinzufügt. Der Build für .NET 7.0 wird von .NET 7, 8, 9, 10 und neuer verwendet; der Build für .NET Standard 2.0 von .NET Framework 4.7.2 und neuer.

Das Paket installieren

Führen Sie einen der folgenden Befehle im Ordner Ihres Projekts aus:

1dotnet add package Aspose.TeX.Drawing
1Install-Package Aspose.TeX.Drawing

Weitere Möglichkeiten, das Paket einzubinden, finden Sie unter Installation.

Binden Sie nur eines der beiden Pakete ein. Verweist ein Projekt sowohl auf Aspose.TeX als auch auf Aspose.TeX.Drawing, wird es ohne Warnungen erstellt, aber nur eine Aspose.TeX.dll wird in den Ausgabeordner kopiert, und die Anwendung schlägt zur Laufzeit fehl, zum Beispiel mit TypeLoadException: Could not load type 'Aspose.TeX.Drawing.SizeF' from assembly 'Aspose.TeX'. Entfernen Sie beim Umstieg auf Aspose.TeX.Drawing zuerst das Paket Aspose.TeX:

1dotnet remove package Aspose.TeX
2dotnet add package Aspose.TeX.Drawing

Von Aspose.TeX zu Aspose.TeX.Drawing wechseln

Namespaces, Klassen und Member sind in beiden Paketen gleich, daher muss der meiste Code nach dem Austausch des Pakets nicht geändert werden.

Farben und Größen

Render-Optionen und -Ergebnisse verwenden Farben und Größen, zum Beispiel MathRendererOptions.TextColor, FigureRendererOptions.BackgroundColor und den Rückgabewert von MathRenderer.Render. In Aspose.TeX.Drawing haben diese Member die Typen Aspose.TeX.Drawing.Color und Aspose.TeX.Drawing.SizeF. Beide Typen werden implizit in System.Drawing.Color und System.Drawing.SizeF und zurück konvertiert. Das sind Standardtypen von .NET, die auf jeder Plattform ohne System.Drawing.Common verfügbar sind. Code wie der folgende wird daher mit beiden Paketen kompiliert und ausgeführt:

 1using System.Drawing;
 2using System.IO;
 3using Aspose.TeX.Features;
 4
 5PngMathRendererOptions options = new PngMathRendererOptions
 6{
 7    Resolution = 150,
 8    TextColor = Color.Black,
 9    BackgroundColor = Color.White
10};
11
12using (Stream stream = File.Create("formula.png"))
13{
14    SizeF size = new PngMathRenderer().Render(@"$$E = mc^2$$", stream, options);
15}

Glättungs- und Interpolationsmodi

Die einzige Änderung betrifft die Eigenschaften SmoothingMode und InterpolationMode der Bildspeicheroptionen (PngSaveOptions, JpegSaveOptions, BmpSaveOptions, TiffSaveOptions). Im Paket Aspose.TeX verwenden sie Enumerationen aus dem Namespace System.Drawing.Drawing2D, der zu System.Drawing.Common gehört (der Compiler meldet sie mit der Warnung CA1416 als nur unter Windows verfügbar). In Aspose.TeX.Drawing verwenden sie die Enumerationen Aspose.TeX.Drawing.SmoothingMode und Aspose.TeX.Drawing.InterpolationMode, die dieselben Member haben. Ersetzen Sie die using-Direktive und lassen Sie den übrigen Code unverändert.

Mit Aspose.TeX:

1using System.Drawing.Drawing2D;
2using Aspose.TeX.Presentation.Image;
3
4PngSaveOptions saveOptions = new PngSaveOptions
5{
6    Resolution = 300,
7    SmoothingMode = SmoothingMode.AntiAlias,
8    InterpolationMode = InterpolationMode.HighQualityBicubic
9};

Mit Aspose.TeX.Drawing:

 1using Aspose.TeX.Presentation.Image;
 2using SmoothingMode = Aspose.TeX.Drawing.SmoothingMode;
 3using InterpolationMode = Aspose.TeX.Drawing.InterpolationMode;
 4
 5PngSaveOptions saveOptions = new PngSaveOptions
 6{
 7    Resolution = 300,
 8    SmoothingMode = SmoothingMode.AntiAlias,
 9    InterpolationMode = InterpolationMode.HighQualityBicubic
10};

Importieren Sie diese beiden Typen wie oben gezeigt mit Aliasen und nicht mit using Aspose.TeX.Drawing;. Der Namespace Aspose.TeX.Drawing enthält auch Color und SizeF. Wird er zusammen mit System.Drawing importiert, meldet der Compiler den Fehler CS0104: 'Color' is an ambiguous reference.

Typen des Namespace Aspose.TeX.Drawing

Den Namespace Aspose.TeX.Drawing gibt es nur im Paket Aspose.TeX.Drawing:

TypVerwendet vonKompatibilität mit System.Drawing
ColorMathRendererOptions.TextColor, FigureRendererOptions.BackgroundColorImplizite Konvertierung in System.Drawing.Color und zurück
SizeFRückgabewert von MathRenderer.Render und FigureRenderer.Render; Size von MathRendererPluginResult und FigureRendererPluginResultImplizite Konvertierung in System.Drawing.SizeF und zurück
SmoothingModeImageSaveOptions.SmoothingModeDieselben Member und Werte wie System.Drawing.Drawing2D.SmoothingMode
InterpolationModeImageSaveOptions.InterpolationModeDieselben Member und Werte wie System.Drawing.Drawing2D.InterpolationMode

In Docker ausführen

Aspose.TeX setzt Dokumente mit seinen eigenen eingebetteten TeX-Schriftarten, und Aspose.TeX.Drawing enthält sein Grafik-Backend. Ihr Container benötigt weder libgdiplus noch fontconfig noch installierte Schriftarten. Die einzige relevante Systemkomponente ist ICU, die für die Ausgabe in XPS und SVG erforderlich ist (siehe Invarianter Globalisierungsmodus).

Die offiziellen .NET-Images auf Basis von Debian und Ubuntu funktionieren ohne zusätzliche Einrichtung:

1FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
2WORKDIR /src
3COPY . .
4RUN dotnet publish -c Release -o /app
5
6FROM mcr.microsoft.com/dotnet/runtime:8.0
7WORKDIR /app
8COPY --from=build /app .
9ENTRYPOINT ["dotnet", "MyApp.dll"]

Ersetzen Sie MyApp.dll durch den Namen Ihrer Anwendung. Verwenden Sie für ASP.NET Core-Anwendungen mcr.microsoft.com/dotnet/aspnet statt mcr.microsoft.com/dotnet/runtime; es gelten dieselben Regeln.

Die folgende Tabelle zeigt, was jede Art von Image benötigt:

Basis-ImageZusätzliche Einrichtung
runtime:8.0, aspnet:8.0 (Debian)Keine
runtime:8.0-noble, aspnet:8.0-noble (Ubuntu)Keine
runtime:8.0-alpine, aspnet:8.0-alpineICU installieren und den invarianten Modus ausschalten (siehe unten)
runtime:8.0-noble-chiseled, aspnet:8.0-noble-chiseledDie Variante -noble-chiseled-extra verwenden, die ICU enthält
runtime:8.0-noble-chiseled-extra, aspnet:8.0-noble-chiseled-extraKeine

Dasselbe gilt für die Images von .NET 9 und .NET 10. Images für linux/amd64 und linux/arm64 werden unterstützt.

Alpine

Alpine-Images führen .NET im invarianten Globalisierungsmodus aus und enthalten kein ICU. Installieren Sie das Paket icu-libs und schalten Sie den invarianten Modus aus:

 1FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
 2WORKDIR /src
 3COPY . .
 4RUN dotnet publish -c Release -o /app
 5
 6FROM mcr.microsoft.com/dotnet/runtime:8.0-alpine
 7RUN apk add --no-cache icu-libs
 8ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false
 9WORKDIR /app
10COPY --from=build /app .
11ENTRYPOINT ["dotnet", "MyApp.dll"]

Chiseled-Images (distroless)

Chiseled-Images enthalten weder eine Shell noch einen Paketmanager, daher können Sie ICU darin nicht installieren. Verwenden Sie die Variante -chiseled-extra, die ICU bereits enthält:

1FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
2WORKDIR /src
3COPY . .
4RUN dotnet publish -c Release -o /app
5
6FROM mcr.microsoft.com/dotnet/runtime:8.0-noble-chiseled-extra
7WORKDIR /app
8COPY --from=build /app .
9ENTRYPOINT ["dotnet", "MyApp.dll"]

Chiseled-Images führen die Anwendung als Benutzer ohne Root-Rechte aus. Schreiben Sie Ausgabedateien an einen beschreibbaren Ort, etwa in ein eingebundenes Volume oder nach /tmp, und nicht in den Anwendungsordner.

Invarianter Globalisierungsmodus

Die Ausgabe in XPS und SVG erfordert ICU. Läuft .NET im invarianten Globalisierungsmodus, schlägt die Konvertierung in XPS oder SVG mit einer Ausnahme wie dieser fehl:

1System.Globalization.CultureNotFoundException: Only the invariant culture is supported in globalization-invariant mode. See https://aka.ms/GlobalizationInvariantMode for more information. (Parameter 'name')
2en-US is an invalid culture identifier.

Der invariante Modus ist in Alpine- und Chiseled-Images standardmäßig eingeschaltet und wird außerdem durch die Projekteigenschaft <InvariantGlobalization>true</InvariantGlobalization> aktiviert. Die Ausgabe in PDF, PNG, JPEG, BMP und TIFF funktioniert im invarianten Modus. Wenn Sie XPS- oder SVG-Ausgabe benötigen, installieren Sie ICU wie unter In Docker ausführen gezeigt und schalten Sie den invarianten Modus im Projekt nicht ein.

Lizenzierung

Aspose.TeX.Drawing verwendet dieselbe Lizenz wie Aspose.TeX, und Sie wenden sie auf dieselbe Weise an (siehe Lizenzierung). Die Lizenz deckt auch das eingebettete Grafik-Backend Aspose.Drawing ab; eine separate Aspose.Drawing-Lizenz ist nicht erforderlich.

Im Evaluierungsmodus trägt die Rasterausgabe (PNG, JPEG, BMP, TIFF) von Aspose.TeX.Drawing zwei Wasserzeichen: das Evaluierungswasserzeichen von Aspose.TeX und das Wasserzeichen „Evaluation only Aspose.Drawing“. Beide verschwinden, sobald Sie die Aspose.TeX-Lizenz anwenden.

Bekannte Einschränkungen

Aspose.TeX.Drawing kann noch keine mehrseitigen TIFF-Dateien speichern. Wenn Sie TiffSaveOptions.Multipage auf true setzen, enthält die resultierende TIFF-Datei nur die erste Seite des Dokuments, und es wird keine Ausnahme ausgelöst. Um alle Seiten zu erhalten, setzen Sie Multipage auf false – dann wird für jede Seite ein eigenes TIFF-Bild erzeugt – oder konvertieren Sie das Dokument in PDF oder XPS.

Fehlerbehebung

FehlerUrsacheLösung
PlatformNotSupportedException: System.Drawing.Common is not supported on this platform.Die Anwendung verwendet das Paket Aspose.TeX unter Linux oder macOS.Verwenden Sie das Paket Aspose.TeX.Drawing.
TypeLoadException: Could not load type 'Aspose.TeX.Drawing.…' from assembly 'Aspose.TeX'Das Projekt verweist sowohl auf Aspose.TeX als auch auf Aspose.TeX.Drawing.Entfernen Sie das Paket Aspose.TeX.
CultureNotFoundException: … en-US is an invalid culture identifier. beim Speichern in XPS oder SVG.NET läuft im invarianten Globalisierungsmodus.Installieren Sie ICU und schalten Sie den invarianten Modus aus, siehe Invarianter Globalisierungsmodus.
error CS0104: 'Color' is an ambiguous reference between 'System.Drawing.Color' and 'Aspose.TeX.Drawing.Color'Der Code importiert sowohl System.Drawing als auch Aspose.TeX.Drawing.Importieren Sie die Typen von Aspose.TeX.Drawing mit Aliasen, siehe Glättungs- und Interpolationsmodi.
Eine mehrseitige TIFF-Datei enthält nur eine Seite.Bekannte Einschränkung von Aspose.TeX.Drawing.Siehe Bekannte Einschränkungen.

Checkliste für die Bereitstellung unter Linux und in Containern