La renderización de batch LaTeX a PNG es un requisito común para la documentación web, las bases de conocimientos y las aplicaciones matemáticas pesadas. Aspose.TEX para .NET proporciona una API sencilla para convertir .tex fuentes en imágenes raster con control sobre directorios de salida y resolución.Este artículo muestra un convertidor de archivo único mínimo y un robusto pipeline de batch que puede caer en cualquier aplicación .NET.
Prerequisitos
- .NET 6 o más tarde
- NuGet paquete:
Aspose.TeX - Fuentes de LaTeX que compilan bajo el motor de Object LaTEX utilizado por Aspose.Tex
Aspose.TeX expuesto TeXOptions.ConsoleAppOptions(TeXConfig.ObjectLaTeX), ImageDevice, y PngSaveOptions Producción de PNG.
Conversión mínima: un archivo LaTeX a PNG
Este ejemplo convierte hello-world.ltx (o .tex) a PNG en una carpeta de salida. el dispositivo escribe los archivos de imagen directamente.
// File: Program.cs
// NuGet: Aspose.TeX
using System;
using System.IO;
using Aspose.TeX;
class Program
{
static void Main()
{
var inputFile = Path.GetFullPath("hello-world.tex"); // or .ltx
var outputDir = Path.GetFullPath("out-png");
Directory.CreateDirectory(outputDir);
// 1) Create conversion options for Object LaTeX
TeXOptions options = TeXOptions.ConsoleAppOptions(TeXConfig.ObjectLaTeX);
// 2) Choose where to write output files
options.OutputWorkingDirectory = new OutputFileSystemDirectory(outputDir);
// 3) Save as PNG (you can set resolution if required)
var png = new PngSaveOptions
{
// Resolution = 300 // uncomment to render at 300 DPI
};
options.SaveOptions = png;
// 4) Run the job. ImageDevice writes PNG files into the output directory.
var device = new ImageDevice();
new TeXJob(inputFile, device, options).Run();
Console.WriteLine("PNG written to: " + outputDir);
}
}
Esto sigue el patrón documentado: crear TeXOptionsEl set OutputWorkingDirectoryEl set PngSaveOptionsDespués de correr a TeXJob Con un ImageDevice.
Conversión de batch: todo .tex Archivos en una carpeta
La versión de batch escanea un directorio de entrada y converte cada uno de ellos. .tex También muestra cómo controlar dónde se leen las dependencias y los gráficos incluidos.
// File: BatchLatexToPng.cs
// NuGet: Aspose.TeX
using System;
using System.IO;
using Aspose.TeX;
public static class BatchLatexToPng
{
public static int Run(string inputDir, string outputDir, int? dpi = null)
{
if (!Directory.Exists(inputDir))
{
Console.Error.WriteLine("Input directory not found: " + inputDir);
return 1;
}
Directory.CreateDirectory(outputDir);
// Configure conversion options once and reuse
var options = TeXOptions.ConsoleAppOptions(TeXConfig.ObjectLaTeX);
// Where to read auxiliary inputs (e.g., included images)
options.InputWorkingDirectory = new InputFileSystemDirectory(inputDir);
// Where to read extra required packages (if you supply them)
// options.RequiredInputDirectory = new InputFileSystemDirectory(Path.Combine(inputDir, "texmf"));
// Where to write PNG, log, aux, etc.
options.OutputWorkingDirectory = new OutputFileSystemDirectory(outputDir);
// PNG save options (set DPI if needed)
var png = new PngSaveOptions();
if (dpi.HasValue) png.Resolution = dpi.Value;
options.SaveOptions = png;
int ok = 0, err = 0;
var device = new ImageDevice(); // will write images to OutputWorkingDirectory
foreach (var texPath in Directory.GetFiles(inputDir, "*.tex", SearchOption.AllDirectories))
{
try
{
// Optional: set a job name so output files have predictable names
options.JobName = Path.GetFileNameWithoutExtension(texPath);
new TeXJob(texPath, device, options).Run();
Console.WriteLine("OK " + Path.GetRelativePath(inputDir, texPath));
ok++;
}
catch (Exception ex)
{
Console.WriteLine("ERR " + Path.GetRelativePath(inputDir, texPath) + " | " + ex.Message);
err++;
}
}
Console.WriteLine($"Done. Success: {ok}, Failed: {err}");
return err == 0 ? 0 : 2;
}
}
Puntos clave para los trabajos de batch:
- Uso
InputWorkingDirectoryde los activos incluidos como\includegraphics{img.png}. - Uso
RequiredInputDirectorysi tiene que proporcionar paquetes adicionales de LaTeX fuera del conjunto integrado. - Sitio
JobNamepara influir en los filenames de producción por documento.
Capturar imágenes en memoria en lugar de escribir archivos
Si prefiere transmitir los bytes PNG por sí mismo, deja que el dispositivo los buffer desactivando los escritos de archivo directo.
using System;
using System.IO;
using Aspose.TeX;
static void ConvertToStreams(string inputFile, string outputDir)
{
Directory.CreateDirectory(outputDir);
var options = TeXOptions.ConsoleAppOptions(TeXConfig.ObjectLaTeX);
var png = new PngSaveOptions { DeviceWritesImages = false };
options.SaveOptions = png;
var device = new ImageDevice();
new TeXJob(inputFile, device, options).Run();
for (int i = 0; i < device.Result.Length; i++)
{
var pageBytes = device.Result[i];
var outPath = Path.Combine(outputDir, $"page-{i + 1}.png");
File.WriteAllBytes(outPath, pageBytes);
}
}
Esto refleja la documentada “moda alternativa” para escribir los archivos PNG de salida principal.
Problemas y consejos
- Resolución: aumento
PngSaveOptions.Resolutionpara las fórmulas más agudas en las capturas de pantalla de la retina o los activos impresos. - Dependencias: colocar paquetes y entradas personalizados en los directorios especificados por
RequiredInputDirectoryyInputWorkingDirectory. - Nombre *: Sitio
options.JobNamepara los nombres de archivos de salida previsibles en batch runs.
- Nombre *: Sitio
- Logging: el motor escribe una transcripción
.loga la guía de salida, que es útil para desbloquear los paquetes desaparecidos y los errores de LaTeX.
Cuando elegir otros formatos
PNG es ideal para la publicación web y la incorporación de UI. Si necesitas salida vector para zoom infinito o texto pequeño a escala, vaya a SVG utilizando SvgSaveOptions Y un SvgDevice, o en PDF para documentos pagados. el flujo de conversión permanece el mismo.
Con estos patrones, puede automatizar LaTeX a PNG a escala en .NET mientras mantiene el control completo sobre la resolución, los directorios y el manejo de archivos.