Reprezentarea cu batch LaTeX la PNG este o cerință comună pentru documentarea web, bazele de cunoștințe și aplicațiile matematice. Aspose.TEX pentru .NET oferă o API simplă de conversie .tex
sursă în imagini raster cu control asupra directorilor de ieșire și rezoluție. Acest articol arată un convertor de fișiere unică minim și un tub robust de batch pe care îl puteți descărca în orice aplicație .NET.
Prevederile
- .NET 6 sau mai târziu
- Pachetul nu este:
Aspose.TeX
- Sursele LaTeX care compilează sub motorul Object LaTEX utilizat de Aspose.Tex
Aspose.TeX expoziții TeXOptions.ConsoleAppOptions(TeXConfig.ObjectLaTeX)
, ImageDevice
, şi PngSaveOptions
pentru a produce PNG.
Conversie minimă: un fișier LaTeX în PNG
Acest exemplu convertează hello-world.ltx
(sau .tex
) la PNG într-o folder de ieșire. dispozitivul scrie fișierele imaginii direct.
// 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);
}
}
Acest lucru urmează modelul documentat: creați TeXOptions
Setul OutputWorkingDirectory
Setul PngSaveOptions
După aceea, rulează a TeXJob
Cu un ImageDevice
.
Conversie de batch: toate .tex
Fișierele într-un folder
Versiunea batch scanează un director de intrare și convertează fiecare .tex
De asemenea, arată cum să controlezi de unde sunt citite dependențele și graficele 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;
}
}
Principalele puncte pentru locuri de muncă de batch:
- Utilizarea
InputWorkingDirectory
pentru activele incluse ca\includegraphics{img.png}
. - Utilizarea
RequiredInputDirectory
dacă trebuie să furnizați pachete suplimentare LaTeX în afara setului încorporat. - Setul
JobName
să influențeze numele de producție prin document.
Capturează imagini în memorie în loc de a scrie fișiere
Dacă preferați să transmiteți byte PNG singur, lăsați dispozitivul să le buffer prin descărcarea scripturilor de fișier direct.
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);
}
}
Acest lucru reflectă modul documentat “alternativ” de a scrie fișierele PNG de ieșire principală.
Problema de rezolvare și sfaturi
- ** Rezoluție**: creștere
PngSaveOptions.Resolution
pentru formule mai ascuțite în ecranele retinei sau activele imprimate. - Dependențe: plasă pachete și intrări personalizate în directorii specificate de
RequiredInputDirectory
şiInputWorkingDirectory
. - Cuvânt cheie: set
options.JobName
pentru numele de fișier de ieșire previzibil în batch runs. - Logging: motorul scrie o transcriptă
.log
la directorul de ieșire, care este util pentru debugarea pachetelor lipsite și a erorilor LaTeX.
Când să alegeți alte formate
PNG este ideal pentru publicarea web și integrarea UI. Dacă aveți nevoie de o ieșire vector pentru un zoom infinit sau un text mic la scară, schimbați-vă la SVG folosind SvgSaveOptions
şi un SvgDevice
, sau în PDF pentru documentele plătite. fluxul de conversie rămâne același.
Cu aceste modele, puteți automatiza LaTeX la PNG la scară în .NET, menținând tot timpul controlul asupra rezoluției, directorilor și gestionării fișierelor.