Batch rendering LaTeX til PNG er et almindeligt krav til webdokumentation, videnbaser og matematiske applikationer. Aspose.TEX for .NET giver en simpel API til konvertering .tex
kilder til rasterbilleder med kontrol over output directories og opløsning. Denne artikel viser en minimal single-file converter og en robust batch pipeline, du kan droppe ind i enhver .NET app.
Forudsætninger
- .NET 6 eller senere
- NuGet pakke:
Aspose.TeX
- LaTeX-kilder, der indsamler under Object LaTex-motoren, som anvendes af Aspose.TEX
Aspose.TeX udstillinger TeXOptions.ConsoleAppOptions(TeXConfig.ObjectLaTeX)
, ImageDevice
, og PngSaveOptions
at producere PNG-produktion.
Minimum konvertering: en LaTeX fil til PNG
Dette eksempel konverterer hello-world.ltx
(eller .tex
) til PNG i en output mappe. enheden skriver billedfiler direkte.
// 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);
}
}
Dette følger det dokumenterede mønster: skabe TeXOptions
Sæt OutputWorkingDirectory
Sæt PngSaveOptions
Så løber A TeXJob
Med en ImageDevice
.
Batch konvertering: Alt .tex
Filer i en mappe
Batch-versionen scanner et input-diagram og konverterer hver .tex
Det viser også, hvordan man kontrollerer, hvor afhængigheder og inkluderede grafik læses fra.
// 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;
}
}
Nøglepunkter for batch jobs:
- Brug af
InputWorkingDirectory
For så vidt angår aktiver som\includegraphics{img.png}
. - Brug af
RequiredInputDirectory
Hvis du skal levere yderligere LaTeX-pakker uden for det indbyggede sæt. - Sæt
JobName
at påvirke produktionsfilene pr. dokument.
Fanger billeder i hukommelse i stedet for at skrive filer
Hvis du foretrækker at streame PNG bytes selv, lad enheden buffer dem ved at afbryde direkte filer.
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);
}
}
Dette spejler den dokumenterede “alternative måde” at skrive de vigtigste output PNG-filer.
Problemløsning og tips
- Resolution: Øget
PngSaveOptions.Resolution
for skarpere formler i retina screenshots eller trykte aktiver. - Afhængigheder: Placerer tilpassede pakker og indtægter i de kataloger, der er angivet af
RequiredInputDirectory
ogInputWorkingDirectory
. - ** Navn**: sæt
options.JobName
for forudsigelige udgangsfilnavne i batch-runs. - Logging: Motoren skriver en transkription
.log
til udgangsdiagrammet, som er nyttigt til debugging af savnede pakker og LaTeX-fejl.
Hvornår skal man vælge andre formater
PNG er ideel til webudgivelse og UI indsættelse. Hvis du har brug for vektorudgang til uendelig zoom eller lille tekst i skalaen, skift til SVG ved at bruge SvgSaveOptions
Og en SvgDevice
, eller til PDF for betalte dokumenter. konverteringsstrømmen forbliver den samme.
Med disse mønstre kan du automatisere LaTeX til PNG på skala i .NET samtidig med at du har fuld kontrol over opløsning, kataloger og filhåndtering.