Die Batch-Rendering von LaTeX zu PNG ist eine allgemeine Anforderung für Web-Dokumentation, Wissensbasis und mathematische Anwendungen. Aspose.TEX für .NET bietet eine einfache API zur Konvertierung .tex Quellen in raster Bilder mit Kontrolle über Ausgangsdirektionen und Auflösung. Dieser Artikel zeigt einen minimalen Ein-Datei-Konverter und eine robuste Batch-Pipeline, die Sie in jede .NET-App fallen können.
Voraussetzung
- .NET 6 oder später
- Das NuGet Paket:
Aspose.TeX - LaTeX-Quellen, die unter dem von Aspose.Tex verwendeten Object-Latex-Motor zusammengefasst werden
Aspose.TeX Ausstellungen TeXOptions.ConsoleAppOptions(TeXConfig.ObjectLaTeX), ImageDevice, und PngSaveOptions Produktion von PNG.
Mindestkonvertierung: Eine LaTeX-Datei in PNG
Dieses Beispiel konvertiert hello-world.ltx (oder .tex) zu PNG in einer Ausgangmappe. Das Gerät schreibt Bilddateien 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);
}
}
Dies folgt dem dokumentierten Muster: Create TeXOptionsund Set OutputWorkingDirectoryund Set PngSaveOptionsUnd dann laufen A TeXJob Mit einem ImageDevice.
Batch Konvertierung: Alle .tex Dateien in einem Ordner
Die Batch-Version scan eine Eingabe-Dokumentation und konvertiert jede .tex zu PNG. Es zeigt auch, wie man kontrolliert, wo Abhängigkeiten und enthaltene Grafiken gelesen werden.
// 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;
}
}
Schlüsselpunkte für Batch Jobs:
- Use
InputWorkingDirectoryInbegriffen von Vermögenswerten wie\includegraphics{img.png}. - Use
RequiredInputDirectorywenn Sie zusätzliche LaTeX-Pakete außerhalb des integrierten Satzes bereitstellen müssen. - Set
JobNameEinfluss auf die Produktionsfilennamen pro Dokument.
Aufnahme von Bildern im Gedächtnis anstatt Dateien zu schreiben
Wenn Sie bevorzugen, PNG-Bytes selbst zu streamen, lassen Sie das Gerät sie buffern, indem Sie direkte Datei schreiben.
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);
}
}
Dies spiegelt die dokumentierte “alternative Art” zum Schreiben der Hauptaufgabe PNG-Dateien.
Problemlösung und Tipps
- Resolution: Erhöhung
PngSaveOptions.Resolutionfür scharfe Formeln in Retina Screenshots oder Druckvermögenswerte. - Abhängigkeiten: Platzieren Sie benutzerdefinierte Pakete und Einträge in die von
RequiredInputDirectoryundInputWorkingDirectory. - Name * Set
options.JobNamefür voraussichtliche Ausgangsdateiennamen in Batch-Runs.
- Name * Set
- Logging: Der Motor schreibt einen Transcript
.logzur Ausgangsdirektion, die nützlich ist, um fehlende Pakete und LaTeX-Fehler zu debuggen.
Wann andere Formate wählen
PNG ist ideal für Webveröffentlichung und UI-Integration. Wenn Sie Vektor-Ausgang für unendliche Zoom oder kleine Text auf der Skala benötigen, wechseln Sie zu SVG durch die Verwendung SvgSaveOptions Und eine SvgDevice, oder in PDF für gepagierte Dokumente. Der Konvertierungstrom bleibt das gleiche.
Mit diesen Mustern können Sie LaTeX zu PNG auf der Skala in .NET automatisieren, während Sie die volle Kontrolle über Auflösung, Directory und Dateihandlung erhalten.