גרפיקה במרווח של LaTeX ל- PNG היא דרישה נפוצה עבור תיעוד אינטרנט, מסדי ידע ויישומים כבדים מתמטית. Aspose.TeX for .NET מציעה API פשוט להמיר .tex מקורות לתמונות רסטר עם שליטה על תיקיות הפצה ופרשנות.האמור מראה ממיר קובץ יחיד מינימלי וטיפולי מנות חזקים שאתה יכול להוריד לכל יישום .NET.

תנאי

  • .NET 6 או מאוחר יותר
  • חבילת NUGET: Aspose.TeX
  • מקורות LaTeX המייצגים תחת מנוע Object LaTeX המשמש על ידי Aspose.TeX

Aspose.TeX exposes TeXOptions.ConsoleAppOptions(TeXConfig.ObjectLaTeX), ImageDevice, ו PngSaveOptions כדי לייצר PNG.


מינון מינימלי: קובץ אחד PNG ל-Latex

דוגמה זו משנה 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 עם A ImageDevice.

תגיות: כל .tex קבצים בפורמט

גרסה המלאה סורקת תיקיה של כניסה ומרבה הצער, ומחליפה כל .tex זה גם מראה כיצד לשלוט היכן תלויות וגרפיקה כלולה נקראים.

// File: BatchLatexToPng.cs
// NuGet: Aspose.TeX

using System;
using System.IO;
using Aspose.TeX;
using Aspose.TeX.IO;
using Aspose.TeX.Presentation.Image;

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 נוספות מחוץ לקבוצה המובנית.
  • Set JobName להגדיל את מספר הקבצים על כל מסמך.

צילום תמונות בזיכרון במקום כתיבת קבצים

אם אתה מעדיף להזרים את האגרטלים PNG בעצמך, תן למכשיר להאריך אותם על ידי כבתקליטת קבצים ישירים.

using System;
using System.IO;
using Aspose.TeX;
using Aspose.TeX.Presentation.Image;

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.
  • שם:• Set options.JobName שמות קבצים של פלטפורמות צפויות ב-batch run.
  • לוגו:המנוע כותב טרנסקריט .log לתיקיה היציאה, אשר שימושי עבור דיבוג חבילות חסרות וטעויות LaTeX.

מתי לבחור פורמטים אחרים

PNG הוא אידיאלי לפרסום באינטרנט ובהבנת UI. אם אתה צריך יציאה וקטור עבור גיוס אינסופי או טקסט קטן בקנה מידה, לעבור SVG באמצעות SvgSaveOptions ו - A SvgDevice, או ל- PDF עבור מסמכים בדפים. זרימת ההמרה נשארת זהה.

באמצעות דפוסים אלה, ניתן לאוטומטיזציה של LaTeX ל- PNG בקנה מידה ב- .NET תוך שמירה על שליטה מלאה על רזולוציה, תיקיות וניהול קבצים.

More in this category