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 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 och InputWorkingDirectory.
    • Namn * Set options.JobName för förutsägbara utgångsfilnamn i batchruns.
  • 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.

More in this category