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

Escolher o pacote certo

O Aspose.TeX para .NET é publicado como dois pacotes NuGet com a mesma API e o mesmo número de versão:

PacoteBack-end gráficoWindowsLinux, macOSEstruturas de destino
Aspose.TeXSystem.Drawing.Common (GDI+)SimNão.NET Framework 4.0, .NET Standard 2.0, .NET 6.0, .NET 7.0
Aspose.TeX.DrawingAspose.Drawing (gerenciado, incluído no pacote)SimSim.NET Standard 2.0, .NET 7.0

A partir do .NET 6, a Microsoft oferece suporte a System.Drawing.Common apenas no Windows. Se o seu aplicativo usar o pacote Aspose.TeX no Linux ou no macOS, ele falhará assim que renderizar algo:

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

Use Aspose.TeX.Drawing quando o aplicativo for executado no Linux, no macOS, em contêineres Docker ou em outros ambientes que não sejam Windows. O pacote também funciona no Windows, portanto você pode usá-lo em todos os lugares se criar um único aplicativo para várias plataformas.

Aspose.TeX.Drawing não depende de System.Drawing.Common nem de libgdiplus. O back-end gráfico Aspose.Drawing está incorporado em Aspose.TeX.dll, então o pacote adiciona um único assembly ao seu aplicativo. A compilação para .NET 7.0 é usada pelo .NET 7, 8, 9, 10 e versões posteriores; a compilação para .NET Standard 2.0, pelo .NET Framework 4.7.2 e versões posteriores.

Instalar o pacote

Execute um dos seguintes comandos na pasta do seu projeto:

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

Consulte Instalação para outras formas de referenciar o pacote.

Referencie apenas um dos dois pacotes. Se um projeto referenciar tanto Aspose.TeX quanto Aspose.TeX.Drawing, ele será compilado sem avisos, mas apenas um Aspose.TeX.dll será copiado para a pasta de saída, e o aplicativo falhará em tempo de execução, por exemplo com TypeLoadException: Could not load type 'Aspose.TeX.Drawing.SizeF' from assembly 'Aspose.TeX'. Ao mudar para Aspose.TeX.Drawing, remova primeiro o pacote Aspose.TeX:

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

Mudar do Aspose.TeX para o Aspose.TeX.Drawing

Namespaces, classes e membros são os mesmos nos dois pacotes, portanto a maior parte do código não precisa de alterações após a substituição do pacote.

Cores e tamanhos

As opções e os resultados de renderização usam cores e tamanhos, por exemplo MathRendererOptions.TextColor, FigureRendererOptions.BackgroundColor e o valor retornado por MathRenderer.Render. Em Aspose.TeX.Drawing, esses membros têm os tipos Aspose.TeX.Drawing.Color e Aspose.TeX.Drawing.SizeF. Os dois tipos são convertidos implicitamente de e para System.Drawing.Color e System.Drawing.SizeF. Esses são tipos padrão do .NET disponíveis em todas as plataformas sem System.Drawing.Common, portanto um código como o seguinte é compilado e executado com qualquer um dos pacotes:

 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 suavização e interpolação

A única alteração diz respeito às propriedades SmoothingMode e InterpolationMode das opções de salvamento de imagens (PngSaveOptions, JpegSaveOptions, BmpSaveOptions, TiffSaveOptions). No pacote Aspose.TeX, elas usam enumerações do namespace System.Drawing.Drawing2D, que pertence a System.Drawing.Common (o compilador as marca como exclusivas do Windows com o aviso CA1416). Em Aspose.TeX.Drawing, elas usam as enumerações Aspose.TeX.Drawing.SmoothingMode e Aspose.TeX.Drawing.InterpolationMode, que têm os mesmos membros. Substitua a diretiva using e mantenha o restante do código.

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

Com 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 esses dois tipos com aliases, como mostrado acima, e não com using Aspose.TeX.Drawing;. O namespace Aspose.TeX.Drawing também contém Color e SizeF, portanto importá-lo junto com System.Drawing causa o erro de compilação CS0104: 'Color' is an ambiguous reference.

Tipos do namespace Aspose.TeX.Drawing

O namespace Aspose.TeX.Drawing existe apenas no pacote Aspose.TeX.Drawing:

TipoUsado porCompatibilidade com System.Drawing
ColorMathRendererOptions.TextColor, FigureRendererOptions.BackgroundColorConversão implícita de e para System.Drawing.Color
SizeFValor retornado por MathRenderer.Render e FigureRenderer.Render; Size de MathRendererPluginResult e FigureRendererPluginResultConversão implícita de e para System.Drawing.SizeF
SmoothingModeImageSaveOptions.SmoothingModeMesmos membros e valores que System.Drawing.Drawing2D.SmoothingMode
InterpolationModeImageSaveOptions.InterpolationModeMesmos membros e valores que System.Drawing.Drawing2D.InterpolationMode

Executar no Docker

O Aspose.TeX compõe documentos com suas próprias fontes TeX incorporadas, e Aspose.TeX.Drawing contém seu back-end gráfico. O seu contêiner não precisa de libgdiplus, fontconfig nem de fontes instaladas. O único componente do sistema que importa é o ICU, necessário para a saída em XPS e SVG (consulte Modo invariável de globalização).

As imagens oficiais do .NET baseadas em Debian e Ubuntu funcionam sem configuração 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"]

Substitua MyApp.dll pelo nome do seu aplicativo. Para aplicativos ASP.NET Core, use mcr.microsoft.com/dotnet/aspnet em vez de mcr.microsoft.com/dotnet/runtime; as mesmas regras se aplicam.

A tabela a seguir mostra o que cada tipo de imagem precisa:

Imagem baseConfiguração adicional
runtime:8.0, aspnet:8.0 (Debian)Nenhuma
runtime:8.0-noble, aspnet:8.0-noble (Ubuntu)Nenhuma
runtime:8.0-alpine, aspnet:8.0-alpineInstalar o ICU e desativar o modo invariável (veja abaixo)
runtime:8.0-noble-chiseled, aspnet:8.0-noble-chiseledUsar a variante -noble-chiseled-extra, que inclui o ICU
runtime:8.0-noble-chiseled-extra, aspnet:8.0-noble-chiseled-extraNenhuma

O mesmo vale para as imagens do .NET 9 e do .NET 10. As imagens linux/amd64 e linux/arm64 são suportadas.

Alpine

As imagens Alpine executam o .NET no modo invariável de globalização e não contêm o ICU. Instale o pacote icu-libs e desative o modo invariável:

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

Imagens chiseled (distroless)

As imagens chiseled não contêm shell nem gerenciador de pacotes, portanto não é possível instalar o ICU nelas. Use a variante -chiseled-extra, que já inclui o 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"]

As imagens chiseled executam o aplicativo como um usuário sem privilégios de root. Grave os arquivos de saída em um local com permissão de gravação, como um volume montado ou /tmp, e não na pasta do aplicativo.

Modo invariável de globalização

A saída em XPS e SVG requer o ICU. Se o .NET for executado no modo invariável de globalização, a conversão para XPS ou SVG falhará com uma exceção 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.

O modo invariável fica ativado por padrão nas imagens Alpine e chiseled e também é ativado pela propriedade de projeto <InvariantGlobalization>true</InvariantGlobalization>. A saída em PDF, PNG, JPEG, BMP e TIFF funciona no modo invariável. Se você precisar de saída em XPS ou SVG, instale o ICU como mostrado em Executar no Docker e não ative o modo invariável no projeto.

Licenciamento

Aspose.TeX.Drawing usa a mesma licença que Aspose.TeX, e você a aplica da mesma forma (consulte Licenciamento). A licença também cobre o back-end gráfico Aspose.Drawing incorporado; não é necessária uma licença separada do Aspose.Drawing.

No modo de avaliação, a saída rasterizada (PNG, JPEG, BMP, TIFF) de Aspose.TeX.Drawing traz duas marcas d’água: a marca d’água de avaliação do Aspose.TeX e uma marca d’água “Evaluation only Aspose.Drawing”. Ambas desaparecem quando você aplica a licença do Aspose.TeX.

Limitações conhecidas

Aspose.TeX.Drawing ainda não consegue salvar arquivos TIFF de várias páginas. Se você definir TiffSaveOptions.Multipage como true, o arquivo TIFF resultante conterá apenas a primeira página do documento, e nenhuma exceção será lançada. Para obter todas as páginas, defina Multipage como false para obter uma imagem TIFF separada para cada página, ou converta o documento para PDF ou XPS.

Solução de problemas

ErroCausaSolução
PlatformNotSupportedException: System.Drawing.Common is not supported on this platform.O aplicativo usa o pacote Aspose.TeX no Linux ou no macOS.Use o pacote Aspose.TeX.Drawing.
TypeLoadException: Could not load type 'Aspose.TeX.Drawing.…' from assembly 'Aspose.TeX'O projeto referencia tanto Aspose.TeX quanto Aspose.TeX.Drawing.Remova o pacote Aspose.TeX.
CultureNotFoundException: … en-US is an invalid culture identifier. ao salvar em XPS ou SVGO .NET é executado no modo invariável de globalização.Instale o ICU e desative o modo invariável; consulte Modo invariável de globalização.
error CS0104: 'Color' is an ambiguous reference between 'System.Drawing.Color' and 'Aspose.TeX.Drawing.Color'O código importa tanto System.Drawing quanto Aspose.TeX.Drawing.Importe os tipos de Aspose.TeX.Drawing com aliases; consulte Modos de suavização e interpolação.
Um arquivo TIFF de várias páginas contém apenas uma página.Limitação conhecida de Aspose.TeX.Drawing.Consulte Limitações conhecidas.

Lista de verificação para implantação no Linux e em contêineres