إن تسليم مجموعة LaTeX إلى PNG هو متطلب شائع للوثائق على شبكة الإنترنت، وقواعد المعرفة، والتطبيقات الرياضية الثقيلة. Aspose.TEX for .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
ثم يركض أ 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
لأسماء الملفات الناتجة المتوقعة في سباقات المجموعة.
- الاسم * : مجموعة
- ** تسجيل الدخول**: يكتب المحرك نسخة
.log
إلى دليل الناتج ، وهو مفيد لتفريغ الحزم المفقودة وأخطاء LaTeX.
متى تختار تنسيقات أخرى
PNG مثالية للنشر على شبكة الإنترنت وإدراج واجهة المستخدم.إذا كنت بحاجة إلى إخراج الفكتور للحصول على زوم لا نهاية له أو نص صغير على نطاق واسع، انتقل إلى SVG باستخدام SvgSaveOptions
وواحد SvgDevice
، أو إلى PDF للمستندات المدفوعة.تدفق التحويل لا يزال هو نفسه.
مع هذه النماذج، يمكنك تلقائي LaTeX إلى PNG على نطاق واسع في .NET مع الحفاظ على السيطرة الكاملة على القرار والمجلدات ومعالجة الملفات.