Batch rendering LaTeX to PNG е общото изискване за уеб документация, бази на знания и математически тежки приложения. Aspose.TEX за .NET осигурява прост API за конвертиране .tex
източници в растер изображения с контрол над директориите на изхода и резолюцията. тази статия показва минимален конвертор на един файл и солидна тръбопровод, който можете да хвърлите във всяка .NET приложение.
Предупреждения
- .NET 6 или по-късно
- Пакетът на НУГЕТ:
Aspose.TeX
- Източници на LaTeX, които се съставят под двигателя на Object LaTEX използван от Aspose.Tex
Aspose.TeX изложба TeXOptions.ConsoleAppOptions(TeXConfig.ObjectLaTeX)
, ImageDevice
, и PngSaveOptions
да произвежда PNG производството.
Минимална конверсия: един LaTeX файл в PNG
Този пример се превръща hello-world.ltx
(или .tex
) към PNG в изходната папка. устройството пише файловете на изображението директно.
// 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);
}
}
Това следва документирания модел: създаване TeXOptions
сет OutputWorkingDirectory
сет PngSaveOptions
След това се изпълнява A TeXJob
С една ImageDevice
.
Батч конверсия: всички .tex
Файлове в папката
Бач версията сканира входна директория и конвертира всяка .tex
Той също така показва как да се контролира откъде се четат зависимостите и включените графики.
// 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;
}
}
Ключови точки за батерията за работа:
- Използване
InputWorkingDirectory
Включени активи като\includegraphics{img.png}
. - Използване
RequiredInputDirectory
ако трябва да предоставите допълнителни LaTeX пакети извън вградения набор. - сет
JobName
да влияе на произходните фајлови имена по документ.
Записване на изображения в паметта вместо писане на файлове
Ако предпочитате да предавате PNG байтове сами, позволете на устройството да ги буфер, като изключите директните файлови писания.
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);
}
}
Това отразява документирания “алтернативен начин” за писане на основните изходни PNG файлове.
Проблеми и съвети
- ** Резолюция**: увеличаване
PngSaveOptions.Resolution
за по-остри формули в екрани на ретината или печатни активи. - Зависимост: поставете персонализирани пакети и вноски в директориите, посочени от
RequiredInputDirectory
иInputWorkingDirectory
. - Название *: набор
options.JobName
за предсказуеми имена на изходните файлове в батерията.
- Название *: набор
- Logging: двигателят пише транскрипт
.log
към директората на изхода, която е полезна за дебютиране на пропуснати пакети и грешки в LaTeX.
Кога да изберете други формати
PNG е идеален за уеб публикация и въвеждане на интерфейс. Ако имате нужда от векторни изходи за безкраен зум или малък текст в мащаб, преместете към SVG, като използвате SvgSaveOptions
И един SvgDevice
, или в PDF за платени документи. потока на конверсия остава същата.
С тези шаблони можете да автоматизирате LaTeX до PNG по мащаб в .NET, като същевременно запазвате пълния контрол върху резолюцията, директорите и обработката на файловете.