Batch rendering LaTeX till PNG är ett vanligt krav för webbdokumentation, kunskapsbaser och matematiska applikationer. Aspose.TEX för .NET ger en enkel API för konvertering .tex källor till rasterbilder med kontroll över utgångsdiagram och upplösning. Denna artikel visar en minimal enskild filkonverterare och en robust batch pipeline du kan kasta in i någon .NET-app.
förutsättningar
- .NET 6 eller senare
- NuGet förpackning:
Aspose.TeX - LaTeX-källor som samlas in under Object laTex-motorn som används av Aspose.Tex
ASPOSE.TEX utställningar TeXOptions.ConsoleAppOptions(TeXConfig.ObjectLaTeX), ImageDevice, och PngSaveOptions att producera PNG-produktion.
Minimal omvandling: en LaTeX-fil till PNG
Detta exempel konverterar hello-world.ltx (eller .tex) till PNG i en output-mapp. Enheten skriver bildfiler direkt.
// 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);
}
}
Detta följer det dokumenterade mönstret: skapa TeXOptionsoch set OutputWorkingDirectoryoch set PngSaveOptionsoch sedan kör A TeXJob Med en ImageDevice.
Batch omvandling: alla .tex filer i en mapp
Batchversionen skannar en input directory och konverterar varje .tex Det visar också hur man kontrollerar var beroende och inbegripet grafik läses från.
// 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;
}
}
Viktiga punkter för batchjobb:
- Användning
InputWorkingDirectoryInnehåller tillgångar som\includegraphics{img.png}. - Användning
RequiredInputDirectoryom du måste tillhandahålla ytterligare LaTeX-paket utanför den inbyggda uppsättningen. - Sätt
JobNameatt påverka utgångsfilnamn per dokument.
Fånga bilder i minnet istället för att skriva filer
Om du föredrar att strömma PNG byter själv, låt enheten buffra dem genom att avbryta direkt fil skrivar.
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);
}
}
Detta speglar det dokumenterade “alternativa sättet” att skriva de viktigaste utgången PNG-filerna.
Problemlösning och tips
- Resolution: öka
PngSaveOptions.Resolutionför skarpa formler i retina skärmdumpar eller tryckta tillgångar. - Dependencies: Placera anpassade paket och inmatningar i de kataloger som anges av
RequiredInputDirectoryochInputWorkingDirectory. - Namn * Set
options.JobNameför förutsägbara utgångsfilnamn i batchruns.
- Namn * Set
- Logging: motorn skriver en transkript
.logtill utgångshandboken, vilket är användbart för att debugga saknade paket och LaTeX-fel.
När man väljer andra format
PNG är idealisk för webbpublicering och UI-integrering. Om du behöver vektorutgång för oändlig zoom eller liten text i skala, växla till SVG genom att använda SvgSaveOptions och en SvgDevice, eller till PDF för betalda dokument. konverteringsflödet förblir detsamma.
Med dessa mönster kan du automatisera LaTeX till PNG i skala i .NET samtidigt som du har full kontroll över upplösning, kataloger och filhantering.