Il rendering di batch LaTeX a PNG è un requisito comune per la documentazione web, le basi di conoscenza e le applicazioni matematiche pesanti. Aspose.TEX per .NET fornisce un semplice API per convertire .tex
Questo articolo mostra un minimo convertitore di file singoli e un robusto pipeline di batch che puoi scendere in qualsiasi app .NET.
Prerequisiti
- .NET 6 o successivo
- Il pacchetto NuGet:
Aspose.TeX
- Le fonti LaTeX che compilano sotto il motore Object La TeX utilizzato da Aspose.Tex
Aspose.TeX esposizione TeXOptions.ConsoleAppOptions(TeXConfig.ObjectLaTeX)
, ImageDevice
, e PngSaveOptions
per la produzione di PNG.
Conversione minima: un file LaTeX a PNG
Questo esempio si converte hello-world.ltx
(o .tex
) a PNG in una cartella di uscita. il dispositivo scrive i file immagine direttamente.
// 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);
}
}
Questo segue il modello documentato: creare TeXOptions
Il set OutputWorkingDirectory
Il set PngSaveOptions
e poi correre a TeXJob
Con un ImageDevice
.
Conversione di batch: tutti .tex
I file in una cartella
La versione di batch scansiona un directory di input e converte ogni .tex
A PNG. Mostra anche come controllare da dove vengono lette le dipendenze e le grafiche incluse.
// 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;
}
}
I punti chiave per i lavori di batch:
- Utilizzo
InputWorkingDirectory
per gli attivi inclusi come\includegraphics{img.png}
. - Utilizzo
RequiredInputDirectory
se è necessario fornire ulteriori pacchetti LaTeX al di fuori del set incorporato. - Il set
JobName
influenzare i filenami di produzione per documento.
Raccogliere immagini nella memoria invece di scrivere file
Se preferite trasmettere i byti PNG da soli, lasciate che il dispositivo li buffer spostando gli scritti di file diretti.
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);
}
}
Questo riflette il documentato “modi alternativi” per scrivere i file PNG di uscita principale.
Risoluzione dei problemi e suggerimenti
- ** Risoluzione**: aumento
PngSaveOptions.Resolution
per formule più acute in screenshots retina o attrezzature stampate. - Dependenze: posizionare i pacchetti e gli input personalizzati nei directories specificati da
RequiredInputDirectory
eInputWorkingDirectory
. - Nome * Set
options.JobName
per i nomi dei file di uscita prevedibili in batch run.
- Nome * Set
- Logging: il motore scrive una transcrizione
.log
per la directory di uscita, che è utile per debuggere i pacchetti scomparsi e gli errori LaTeX.
Quando scegliere altri formati
PNG è ideale per la pubblicazione web e l’integrazione dell’UI. Se hai bisogno di un’uscita vectorale per un zoom infinito o un piccolo testo su scala, passare a SVG utilizzando SvgSaveOptions
e un SvgDevice
, o in PDF per i documenti pagati. il flusso di conversione rimane lo stesso.
Con questi modelli, è possibile automatizzare LaTeX a PNG su scala in .NET mantenendo il pieno controllo sulla risoluzione, i directory e la gestione dei file.