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 TeXOptions
et Set OutputWorkingDirectory
et Set PngSaveOptions
Puis 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
etInputWorkingDirectory
. - Nom * : Set
options.JobName
pour les noms de fichiers de sortie prévisibles dans les courses de batch.
- Nom * : Set
- 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.