Linux, macOS y Docker | Aspose.TeX para .NET

Elegir el paquete adecuado

Aspose.TeX para .NET se publica como dos paquetes NuGet con la misma API y el mismo número de versión:

PaqueteBackend gráficoWindowsLinux, macOSMarcos de destino
Aspose.TeXSystem.Drawing.Common (GDI+)SíNo.NET Framework 4.0, .NET Standard 2.0, .NET 6.0, .NET 7.0
Aspose.TeX.DrawingAspose.Drawing (administrado, integrado en el paquete)SíSí.NET Standard 2.0, .NET 7.0

A partir de .NET 6, Microsoft admite System.Drawing.Common solo en Windows. Si su aplicación usa el paquete Aspose.TeX en Linux o macOS, falla en cuanto renderiza algo:

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

Use Aspose.TeX.Drawing cuando su aplicación se ejecute en Linux, macOS, contenedores Docker u otros entornos distintos de Windows. El paquete también funciona en Windows, así que puede usarlo en todas partes si compila una aplicación para varias plataformas.

Aspose.TeX.Drawing no depende de System.Drawing.Common ni de libgdiplus. El backend gráfico Aspose.Drawing está integrado en Aspose.TeX.dll, por lo que el paquete aporta un único ensamblado a su aplicación. La compilación para .NET 7.0 la usan .NET 7, 8, 9, 10 y versiones posteriores; la compilación para .NET Standard 2.0, .NET Framework 4.7.2 y versiones posteriores.

Instalar el paquete

Ejecute uno de los siguientes comandos en la carpeta de su proyecto:

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

Consulte Instalación para conocer otras formas de referenciar el paquete.

Referencie solo uno de los dos paquetes. Si un proyecto referencia tanto Aspose.TeX como Aspose.TeX.Drawing, se compila sin advertencias, pero solo se copia un Aspose.TeX.dll a la carpeta de salida y la aplicación falla en tiempo de ejecución, por ejemplo con TypeLoadException: Could not load type 'Aspose.TeX.Drawing.SizeF' from assembly 'Aspose.TeX'. Al cambiar a Aspose.TeX.Drawing, quite primero el paquete Aspose.TeX:

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

Cambiar de Aspose.TeX a Aspose.TeX.Drawing

Los espacios de nombres, las clases y los miembros son los mismos en ambos paquetes, por lo que la mayor parte del código no necesita cambios tras sustituir el paquete.

Colores y tamaños

Las opciones y los resultados de renderizado usan colores y tamaños, por ejemplo MathRendererOptions.TextColor, FigureRendererOptions.BackgroundColor y el valor devuelto por MathRenderer.Render. En Aspose.TeX.Drawing, estos miembros tienen los tipos Aspose.TeX.Drawing.Color y Aspose.TeX.Drawing.SizeF. Ambos tipos se convierten implícitamente a System.Drawing.Color y System.Drawing.SizeF y viceversa. Son tipos estándar de .NET disponibles en todas las plataformas sin System.Drawing.Common, así que un código como el siguiente se compila y se ejecuta con cualquiera de los dos paquetes:

 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}

Modos de suavizado e interpolación

El único cambio afecta a las propiedades SmoothingMode e InterpolationMode de las opciones de guardado de imágenes (PngSaveOptions, JpegSaveOptions, BmpSaveOptions, TiffSaveOptions). En el paquete Aspose.TeX, usan enumeraciones del espacio de nombres System.Drawing.Drawing2D, que pertenece a System.Drawing.Common (el compilador las marca como exclusivas de Windows con la advertencia CA1416). En Aspose.TeX.Drawing, usan las enumeraciones Aspose.TeX.Drawing.SmoothingMode y Aspose.TeX.Drawing.InterpolationMode, que tienen los mismos miembros. Sustituya la directiva using y mantenga el resto del código.

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

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

Importe estos dos tipos con alias, como se muestra arriba, y no con using Aspose.TeX.Drawing;. El espacio de nombres Aspose.TeX.Drawing también contiene Color y SizeF, por lo que importarlo junto con System.Drawing provoca el error de compilación CS0104: 'Color' is an ambiguous reference.

Tipos del espacio de nombres Aspose.TeX.Drawing

El espacio de nombres Aspose.TeX.Drawing solo existe en el paquete Aspose.TeX.Drawing:

TipoUsado porCompatibilidad con System.Drawing
ColorMathRendererOptions.TextColor, FigureRendererOptions.BackgroundColorConversión implícita a System.Drawing.Color y viceversa
SizeFValor devuelto por MathRenderer.Render y FigureRenderer.Render; Size de MathRendererPluginResult y FigureRendererPluginResultConversión implícita a System.Drawing.SizeF y viceversa
SmoothingModeImageSaveOptions.SmoothingModeMismos miembros y valores que System.Drawing.Drawing2D.SmoothingMode
InterpolationModeImageSaveOptions.InterpolationModeMismos miembros y valores que System.Drawing.Drawing2D.InterpolationMode

Ejecutar en Docker

Aspose.TeX compone los documentos con sus propias fuentes TeX integradas, y Aspose.TeX.Drawing contiene su backend gráfico. Su contenedor no necesita libgdiplus, ni fontconfig, ni fuentes instaladas. El único componente del sistema que importa es ICU, necesario para la salida en XPS y SVG (consulte Modo invariable de globalización).

Las imágenes oficiales de .NET basadas en Debian y Ubuntu funcionan sin configuración adicional:

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

Sustituya MyApp.dll por el nombre de su aplicación. Para aplicaciones ASP.NET Core, use mcr.microsoft.com/dotnet/aspnet en lugar de mcr.microsoft.com/dotnet/runtime; se aplican las mismas reglas.

La siguiente tabla indica qué necesita cada tipo de imagen:

Imagen baseConfiguración adicional
runtime:8.0, aspnet:8.0 (Debian)Ninguna
runtime:8.0-noble, aspnet:8.0-noble (Ubuntu)Ninguna
runtime:8.0-alpine, aspnet:8.0-alpineInstalar ICU y desactivar el modo invariable (ver más abajo)
runtime:8.0-noble-chiseled, aspnet:8.0-noble-chiseledUsar la variante -noble-chiseled-extra, que incluye ICU
runtime:8.0-noble-chiseled-extra, aspnet:8.0-noble-chiseled-extraNinguna

Lo mismo se aplica a las imágenes de .NET 9 y .NET 10. Se admiten imágenes linux/amd64 y linux/arm64.

Alpine

Las imágenes Alpine ejecutan .NET en modo invariable de globalización y no contienen ICU. Instale el paquete icu-libs y desactive el modo invariable:

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

Imágenes chiseled (distroless)

Las imágenes chiseled no contienen shell ni gestor de paquetes, por lo que no es posible instalar ICU en ellas. Use la variante -chiseled-extra, que ya incluye 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"]

Las imágenes chiseled ejecutan la aplicación como un usuario sin privilegios de root. Escriba los archivos de salida en una ubicación con permisos de escritura, como un volumen montado o /tmp, y no en la carpeta de la aplicación.

Modo invariable de globalización

La salida en XPS y SVG requiere ICU. Si .NET se ejecuta en modo invariable de globalización, la conversión a XPS o SVG falla con una excepción como esta:

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.

El modo invariable está activado de forma predeterminada en las imágenes Alpine y chiseled, y también lo activa la propiedad de proyecto <InvariantGlobalization>true</InvariantGlobalization>. La salida en PDF, PNG, JPEG, BMP y TIFF funciona en modo invariable. Si necesita salida en XPS o SVG, instale ICU como se muestra en Ejecutar en Docker y no active el modo invariable en el proyecto.

Licencias

Aspose.TeX.Drawing usa la misma licencia que Aspose.TeX, y se aplica de la misma manera (consulte Licencias). La licencia también cubre el backend gráfico Aspose.Drawing integrado; no necesita una licencia de Aspose.Drawing aparte.

En modo de evaluación, la salida rasterizada (PNG, JPEG, BMP, TIFF) de Aspose.TeX.Drawing lleva dos marcas de agua: la marca de agua de evaluación de Aspose.TeX y una marca de agua «Evaluation only Aspose.Drawing». Ambas desaparecen al aplicar la licencia de Aspose.TeX.

Limitaciones conocidas

Aspose.TeX.Drawing todavía no puede guardar archivos TIFF de varias páginas. Si establece TiffSaveOptions.Multipage en true, el archivo TIFF resultante contiene solo la primera página del documento y no se produce ninguna excepción. Para obtener todas las páginas, establezca Multipage en false para obtener una imagen TIFF independiente por página, o convierta el documento a PDF o XPS.

Solución de problemas

ErrorCausaSolución
PlatformNotSupportedException: System.Drawing.Common is not supported on this platform.La aplicación usa el paquete Aspose.TeX en Linux o macOS.Use el paquete Aspose.TeX.Drawing.
TypeLoadException: Could not load type 'Aspose.TeX.Drawing.…' from assembly 'Aspose.TeX'El proyecto referencia tanto Aspose.TeX como Aspose.TeX.Drawing.Quite el paquete Aspose.TeX.
CultureNotFoundException: … en-US is an invalid culture identifier. al guardar en XPS o SVG.NET se ejecuta en modo invariable de globalización.Instale ICU y desactive el modo invariable; consulte Modo invariable de globalización.
error CS0104: 'Color' is an ambiguous reference between 'System.Drawing.Color' and 'Aspose.TeX.Drawing.Color'El código importa tanto System.Drawing como Aspose.TeX.Drawing.Importe los tipos de Aspose.TeX.Drawing con alias; consulte Modos de suavizado e interpolación.
Un archivo TIFF de varias páginas contiene solo una página.Limitación conocida de Aspose.TeX.Drawing.Consulte Limitaciones conocidas.

Lista de comprobación para la implementación en Linux y contenedores