Batch rendering LaTeX naar PNG is een gemeenschappelijke vereiste voor webdocumentatie, kennisbanken en wiskundige toepassingen. Aspose.TEX voor .NET biedt een eenvoudige API om te converteren .tex bronnen in raster afbeeldingen met controle over output directories en resolutie. dit artikel toont een minimale single-file converter en een robuste batch pipeline die u in elke .NET-app kunt vallen.

Voorwaarden

  • .NET 6 of later
  • NuGet pakket: Aspose.TeX
  • LaTeX bronnen die worden gecompileerd onder de Object LaTex-motor die wordt gebruikt door Aspose.TEX

Aspose.TeX vertonen TeXOptions.ConsoleAppOptions(TeXConfig.ObjectLaTeX), ImageDevice, en PngSaveOptions om PNG-productie te produceren.

Minimale conversie: één LaTeX bestand naar PNG

Dit voorbeeld converteert hello-world.ltx (of .tex) naar PNG in een output map. Het apparaat schrijft beeldbestanden rechtstreeks.

// 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);
    }
}

Dit volgt het gedocumenteerde patroon: creëren TeXOptionsDe set OutputWorkingDirectoryDe set PngSaveOptionsVervolgens rijden A TeXJob Met een ImageDevice.

Batch conversie: alle .tex Bestanden in een map

De batchversie scanneert een input directory en converteert elk .tex Het toont ook hoe te controleren waar afhankelijkheden en opgenomen graphics worden gelezen.

// 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;
    }
}

Belangrijke punten voor batch jobs:

  • Gebruik InputWorkingDirectory Inbegrepen activa zoals \includegraphics{img.png}.
  • Gebruik RequiredInputDirectory als u extra LaTeX-pakketten buiten de ingebouwde set moet leveren.
  • Set op JobName om de productie van filenamen per document te beïnvloeden.

Foto’s opnemen in geheugen in plaats van bestanden schrijven

Als u liever om PNG byten zelf te streamen, laat het apparaat ze buffer door direct bestand schrijven af te wisselen.

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);
    }
}

Dit spiegelt de gedocumenteerde “alternatieve manier” om de belangrijkste output PNG-bestanden te schrijven.

Problemen en tips

  • Resolutie: verhoging PngSaveOptions.Resolution voor scherper formules in retina screenshots of gedrukte activa.
  • Dependencies: plaatsen van aangepaste pakketten en inputs in de door RequiredInputDirectory en InputWorkingDirectory.
    • Naam * : Set options.JobName voor voorspelbare output bestandnamen in batch runs.
  • Logging: de motor schrijft een transcript .log naar de output directory, die nuttig is voor het ontgrendelen van verloren pakketten en LaTeX-fouten.

Wanneer kiezen voor andere formaten

PNG is ideaal voor webpublicatie en UI-integratie.Als u vectoruitgang nodig hebt voor oneindige zoom of kleine tekst op schaal, wisselen naar SVG door gebruik te maken van SvgSaveOptions En een SvgDevice, of naar PDF voor gepageteerde documenten. de conversie stroom blijft hetzelfde.

Met deze patronen kunt u LaTeX naar PNG automatiseren op schaal in .NET terwijl u volledige controle over resolutie, directories en bestandsbehandeling behouden.

More in this category