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 TeXOptions
El set OutputWorkingDirectory
El set PngSaveOptions
Despué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
InputWorkingDirectory
de los activos incluidos como\includegraphics{img.png}
. - Uso
RequiredInputDirectory
si tiene que proporcionar paquetes adicionales de LaTeX fuera del conjunto integrado. - Sitio
JobName
para 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.Resolution
para 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
RequiredInputDirectory
yInputWorkingDirectory
. - Nombre *: Sitio
options.JobName
para los nombres de archivos de salida previsibles en batch runs.
- Nombre *: Sitio
- Logging: el motor escribe una transcripción
.log
a 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.