إن تسليم مجموعة 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 مع الحفاظ على السيطرة الكاملة على القرار والمجلدات ومعالجة الملفات.

More in this category