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 TeXOptions
und Set OutputWorkingDirectory
und Set PngSaveOptions
Und 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
InputWorkingDirectory
Inbegriffen von Vermögenswerten wie\includegraphics{img.png}
. - Use
RequiredInputDirectory
wenn Sie zusätzliche LaTeX-Pakete außerhalb des integrierten Satzes bereitstellen müssen. - Set
JobName
Einfluss 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.Resolution
für scharfe Formeln in Retina Screenshots oder Druckvermögenswerte. - Abhängigkeiten: Platzieren Sie benutzerdefinierte Pakete und Einträge in die von
RequiredInputDirectory
undInputWorkingDirectory
. - Name * Set
options.JobName
für voraussichtliche Ausgangsdateiennamen in Batch-Runs.
- Name * Set
- Logging: Der Motor schreibt einen Transcript
.log
zur 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.