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 TeXOptions
och set OutputWorkingDirectory
och set PngSaveOptions
och 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
InputWorkingDirectory
Innehåller tillgångar som\includegraphics{img.png}
. - Användning
RequiredInputDirectory
om du måste tillhandahålla ytterligare LaTeX-paket utanför den inbyggda uppsättningen. - Sätt
JobName
att 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.Resolution
för skarpa formler i retina skärmdumpar eller tryckta tillgångar. - Dependencies: Placera anpassade paket och inmatningar i de kataloger som anges av
RequiredInputDirectory
ochInputWorkingDirectory
. - Namn * Set
options.JobName
för förutsägbara utgångsfilnamn i batchruns.
- Namn * Set
- Logging: motorn skriver en transkript
.log
till 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.