Linux, macOS et Docker | Aspose.TeX pour .NET

Choisir le bon package

Aspose.TeX pour .NET est publié sous forme de deux packages NuGet ayant la même API et le même numéro de version :

PackageMoteur graphiqueWindowsLinux, macOSFrameworks cibles
Aspose.TeXSystem.Drawing.Common (GDI+)OuiNon.NET Framework 4.0, .NET Standard 2.0, .NET 6.0, .NET 7.0
Aspose.TeX.DrawingAspose.Drawing (managé, intégré au package)OuiOui.NET Standard 2.0, .NET 7.0

À partir de .NET 6, Microsoft ne prend en charge System.Drawing.Common que sous Windows. Si votre application utilise le package Aspose.TeX sous Linux ou macOS, elle échoue dès qu’elle effectue un rendu :

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

Utilisez Aspose.TeX.Drawing lorsque votre application s’exécute sous Linux, macOS, dans des conteneurs Docker ou dans d’autres environnements que Windows. Le package fonctionne aussi sous Windows ; vous pouvez donc l’utiliser partout si vous générez une même application pour plusieurs plateformes.

Aspose.TeX.Drawing ne dépend ni de System.Drawing.Common ni de libgdiplus. Le moteur graphique Aspose.Drawing est intégré à Aspose.TeX.dll : le package n’ajoute donc qu’un seul assembly à votre application. La version pour .NET 7.0 est utilisée par .NET 7, 8, 9, 10 et versions ultérieures ; la version pour .NET Standard 2.0 par .NET Framework 4.7.2 et versions ultérieures.

Installer le package

Exécutez l’une des commandes suivantes dans le dossier de votre projet :

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

Consultez Installation pour d’autres façons de référencer le package.

Ne référencez qu’un seul des deux packages. Si un projet référence à la fois Aspose.TeX et Aspose.TeX.Drawing, il se compile sans avertissement, mais un seul Aspose.TeX.dll est copié dans le dossier de sortie, et l’application échoue à l’exécution, par exemple avec TypeLoadException: Could not load type 'Aspose.TeX.Drawing.SizeF' from assembly 'Aspose.TeX'. Lorsque vous passez à Aspose.TeX.Drawing, supprimez d’abord le package Aspose.TeX :

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

Passer d’Aspose.TeX à Aspose.TeX.Drawing

Les espaces de noms, les classes et les membres sont identiques dans les deux packages ; la plupart du code ne nécessite donc aucune modification après le remplacement du package.

Couleurs et tailles

Les options et les résultats de rendu utilisent des couleurs et des tailles, par exemple MathRendererOptions.TextColor, FigureRendererOptions.BackgroundColor et la valeur renvoyée par MathRenderer.Render. Dans Aspose.TeX.Drawing, ces membres ont les types Aspose.TeX.Drawing.Color et Aspose.TeX.Drawing.SizeF. Les deux types se convertissent implicitement vers et depuis System.Drawing.Color et System.Drawing.SizeF. Ce sont des types .NET standard, disponibles sur toutes les plateformes sans System.Drawing.Common ; un code comme le suivant se compile et s’exécute donc avec l’un ou l’autre package :

 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}

Modes de lissage et d’interpolation

La seule différence concerne les propriétés SmoothingMode et InterpolationMode des options d’enregistrement d’images (PngSaveOptions, JpegSaveOptions, BmpSaveOptions, TiffSaveOptions). Dans le package Aspose.TeX, elles utilisent des énumérations de l’espace de noms System.Drawing.Drawing2D, qui appartient à System.Drawing.Common (le compilateur les signale comme réservées à Windows avec l’avertissement CA1416). Dans Aspose.TeX.Drawing, elles utilisent les énumérations Aspose.TeX.Drawing.SmoothingMode et Aspose.TeX.Drawing.InterpolationMode, qui ont les mêmes membres. Remplacez la directive using et conservez le reste du code.

Avec 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};

Avec 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};

Importez ces deux types avec des alias, comme ci-dessus, plutôt qu’avec using Aspose.TeX.Drawing;. L’espace de noms Aspose.TeX.Drawing contient aussi Color et SizeF ; l’importer en même temps que System.Drawing provoque l’erreur de compilation CS0104: 'Color' is an ambiguous reference.

Types de l’espace de noms Aspose.TeX.Drawing

L’espace de noms Aspose.TeX.Drawing n’existe que dans le package Aspose.TeX.Drawing :

TypeUtilisé parCompatibilité avec System.Drawing
ColorMathRendererOptions.TextColor, FigureRendererOptions.BackgroundColorConversion implicite vers et depuis System.Drawing.Color
SizeFValeur renvoyée par MathRenderer.Render et FigureRenderer.Render ; Size de MathRendererPluginResult et FigureRendererPluginResultConversion implicite vers et depuis System.Drawing.SizeF
SmoothingModeImageSaveOptions.SmoothingModeMêmes membres et valeurs que System.Drawing.Drawing2D.SmoothingMode
InterpolationModeImageSaveOptions.InterpolationModeMêmes membres et valeurs que System.Drawing.Drawing2D.InterpolationMode

Exécuter dans Docker

Aspose.TeX compose les documents avec ses propres polices TeX intégrées, et Aspose.TeX.Drawing contient son moteur graphique. Votre conteneur n’a besoin ni de libgdiplus, ni de fontconfig, ni de polices installées. Le seul composant système qui compte est ICU, nécessaire pour la sortie XPS et SVG (voir Mode invariant de globalisation).

Les images .NET officielles basées sur Debian et Ubuntu fonctionnent sans configuration supplémentaire :

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"]

Remplacez MyApp.dll par le nom de votre application. Pour les applications ASP.NET Core, utilisez mcr.microsoft.com/dotnet/aspnet au lieu de mcr.microsoft.com/dotnet/runtime ; les mêmes règles s’appliquent.

Le tableau suivant indique ce dont chaque type d’image a besoin :

Image de baseConfiguration supplémentaire
runtime:8.0, aspnet:8.0 (Debian)Aucune
runtime:8.0-noble, aspnet:8.0-noble (Ubuntu)Aucune
runtime:8.0-alpine, aspnet:8.0-alpineInstaller ICU et désactiver le mode invariant (voir ci-dessous)
runtime:8.0-noble-chiseled, aspnet:8.0-noble-chiseledUtiliser la variante -noble-chiseled-extra, qui inclut ICU
runtime:8.0-noble-chiseled-extra, aspnet:8.0-noble-chiseled-extraAucune

Il en va de même pour les images .NET 9 et .NET 10. Les images linux/amd64 et linux/arm64 sont prises en charge.

Alpine

Les images Alpine exécutent .NET en mode invariant de globalisation et ne contiennent pas ICU. Installez le package icu-libs et désactivez le mode invariant :

 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"]

Images chiseled (distroless)

Les images chiseled ne contiennent ni shell ni gestionnaire de packages ; vous ne pouvez donc pas y installer ICU. Utilisez la variante -chiseled-extra, qui inclut déjà ICU :

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"]

Les images chiseled exécutent l’application sous un utilisateur sans privilèges root. Écrivez les fichiers de sortie dans un emplacement accessible en écriture, comme un volume monté ou /tmp, plutôt que dans le dossier de l’application.

Mode invariant de globalisation

La sortie XPS et SVG nécessite ICU. Si .NET s’exécute en mode invariant de globalisation, la conversion en XPS ou en SVG échoue avec une exception comme celle-ci :

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.

Le mode invariant est activé par défaut dans les images Alpine et chiseled, ainsi que par la propriété de projet <InvariantGlobalization>true</InvariantGlobalization>. La sortie PDF, PNG, JPEG, BMP et TIFF fonctionne en mode invariant. Si vous avez besoin d’une sortie XPS ou SVG, installez ICU comme indiqué dans Exécuter dans Docker et n’activez pas le mode invariant dans le projet.

Licence

Aspose.TeX.Drawing utilise la même licence qu’Aspose.TeX, et vous l’appliquez de la même manière (voir Licence). La licence couvre aussi le moteur graphique Aspose.Drawing intégré ; aucune licence Aspose.Drawing distincte n’est nécessaire.

En mode d’évaluation, la sortie raster (PNG, JPEG, BMP, TIFF) d’Aspose.TeX.Drawing porte deux filigranes : le filigrane d’évaluation d’Aspose.TeX et un filigrane « Evaluation only Aspose.Drawing ». Les deux disparaissent dès que vous appliquez la licence Aspose.TeX.

Limitations connues

Aspose.TeX.Drawing ne peut pas encore enregistrer de fichiers TIFF multipages. Si vous définissez TiffSaveOptions.Multipage sur true, le fichier TIFF obtenu ne contient que la première page du document, et aucune exception n’est levée. Pour obtenir toutes les pages, définissez Multipage sur false afin d’obtenir une image TIFF distincte par page, ou convertissez le document en PDF ou en XPS.

Dépannage

ErreurCauseSolution
PlatformNotSupportedException: System.Drawing.Common is not supported on this platform.L’application utilise le package Aspose.TeX sous Linux ou macOS.Utilisez le package Aspose.TeX.Drawing.
TypeLoadException: Could not load type 'Aspose.TeX.Drawing.…' from assembly 'Aspose.TeX'Le projet référence à la fois Aspose.TeX et Aspose.TeX.Drawing.Supprimez le package Aspose.TeX.
CultureNotFoundException: … en-US is an invalid culture identifier. lors de l’enregistrement en XPS ou en SVG.NET s’exécute en mode invariant de globalisation.Installez ICU et désactivez le mode invariant, voir Mode invariant de globalisation.
error CS0104: 'Color' is an ambiguous reference between 'System.Drawing.Color' and 'Aspose.TeX.Drawing.Color'Le code importe à la fois System.Drawing et Aspose.TeX.Drawing.Importez les types d’Aspose.TeX.Drawing avec des alias, voir Modes de lissage et d’interpolation.
Un fichier TIFF multipage ne contient qu’une seule page.Limitation connue d’Aspose.TeX.Drawing.Voir Limitations connues.

Liste de contrôle pour le déploiement sous Linux et dans des conteneurs