Le rendu de la LaTeX à la PNG est un requis commun pour la documentation web, les bases de connaissances et les applications mathématiques. Aspose.TEX pour .NET fournit une API simple pour convertir .tex source en images raster avec contrôle sur les directories de sortie et la résolution. Cet article montre un convertisseur de fichiers unique minimum et un pipeline de batch robuste que vous pouvez jeter dans n’importe quelle application .NET.

Principaux

  • .NET 6 ou plus tard
  • Nouveau paquet : Aspose.TeX
  • Les sources de laTeX qui se composent sous le moteur de l’Object LaTex utilisé par Aspose.Te X

Aspose.TeX exposé TeXOptions.ConsoleAppOptions(TeXConfig.ObjectLaTeX), ImageDevice, et PngSaveOptions pour produire la production de PNG.

Conversion minimale : un fichier LaTeX à PNG

Cet exemple convertit hello-world.ltx (ou .tex) à PNG dans un dossier de sortie. le dispositif écrit les fichiers d’image directement.

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

Ceci suit le modèle documenté: Créer TeXOptionset Set OutputWorkingDirectoryet Set PngSaveOptionsPuis courir A TeXJob Avec un ImageDevice.

Conversion Batch : tout .tex Les fichiers dans un dossier

La version batch scanne un catalogue d’entrée et convertit chaque .tex Il montre également comment contrôler où les dépendances et les graphiques inclus sont lues.

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

Les points clés pour les emplois de batch :

  • Utiliser InputWorkingDirectory Pour les actifs tels que \includegraphics{img.png}.
  • Utiliser RequiredInputDirectory Si vous devez fournir des paquets LaTeX supplémentaires en dehors du set intégré.
  • Sélection JobName pour influencer les noms de production par document.

Capturer des images dans la mémoire au lieu d’écrire des fichiers

Si vous préférez diffuser les bytes PNG vous-même, laissez le dispositif les buffer en désactivant les fichiers directs.

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

Cela reflète la « façon alternative » documentée pour écrire les fichiers PNG de sortie principale.

Résolution des troubles et des conseils

  • Résolution : augmentation PngSaveOptions.Resolution pour des formules plus étroites dans les captures d’écran de rétine ou les actifs imprimés.
  • Dépendances: placez les paquets et les entrées personnalisés dans les catégories spécifiées par RequiredInputDirectory et InputWorkingDirectory.
    • Nom * : Set options.JobName pour les noms de fichiers de sortie prévisibles dans les courses de batch.
  • Logging : le moteur écrit une transcription .log à la catégorie de sortie, qui est utile pour déboucher sur les paquets manquants et les erreurs de LaTeX.

Quand choisir les autres formats

PNG est idéal pour la publication web et l’intégration d’UI. Si vous avez besoin de sortie vectorielle pour un zoom infini ou un petit texte à échelle, passez à SVG en utilisant SvgSaveOptions et un SvgDevice, ou en PDF pour les documents payés. le flux de conversion reste le même.

Avec ces modèles, vous pouvez automatiser LaTeX à PNG à l’échelle de .NET tout en gardant le contrôle complet sur la résolution, les directories et la gestion des fichiers.

More in this category