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 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 und InputWorkingDirectory.
    • Name * Set options.JobName für voraussichtliche Ausgangsdateiennamen in Batch-Runs.
  • 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.

More in this category