การจัดเรียงแบตช์ LaTeX ไปยัง PNG เป็นข้อกําหนดทั่วไปสําหรับเอกสารเว็บฐานความรู้และแอพพลิเคชันขนาดเล็ก. Aspose.TEX สําหรับ .NET ให้ API ที่ง่ายต่อการแปลง .tex
วัตถุประสงค์ในการสกรูรูปภาพที่มีการควบคุมของไดเรกทอรีการส่งออกและความละเอียด บทความนี้แสดงให้เห็นการแปลงไฟล์แบบเดี่ยวขั้นต่ําและท่อชุดที่แข็งแกร่งที่คุณสามารถวางลงในแอป .NET ใด ๆ
ข้อกําหนด
- .NET 6 หรือเร็วกว่า
- แพคเกจ NuGet:
Aspose.TeX
- แหล่ง LaTeX ที่รวบรวมภายใต้มอเตอร์ Object LaTex ที่ใช้โดย Aspose.TEX
Aspose.TeX แสดง TeXOptions.ConsoleAppOptions(TeXConfig.ObjectLaTeX)
, ImageDevice
, และ PngSaveOptions
การผลิต PNG
การแปลงขั้นต่ํา: 1 ไฟล์ 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
จากนั้น Run A TeXJob
ด้วย A ImageDevice
.
การแปลงแบทช์: ทั้งหมด .tex
ไฟล์ในโฟลเดอร์
รุ่นชุดสแกนไดเรกทอรีป้อนและแปลงแต่ละ .tex
ไปยัง PNG นอกจากนี้ยังแสดงให้เห็นว่าวิธีการควบคุมที่อ้างอิงและกราฟิกที่รวมจะอ่านจาก
// 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
การมีผลกระทบต่อชื่อไฟล์การส่งออกตามเอกสาร
การบันทึกภาพในหน่วยความจําแทนที่จะเขียนไฟล์
หากคุณชอบที่จะ stream PNG bytes ตัวคุณเองให้อุปกรณ์ buffer พวกเขาโดยการปิดการเขียนไฟล์โดยตรง จากนั้นบันทึกแต่ละหน้าไปยังชื่อไฟล์ของคุณเอง
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
สําหรับสูตรที่ชัดเจนขึ้นในภาพหน้าจอเครือข่ายหรือสินทรัพย์พิมพ์ - Dependencies: โพสต์แพคเกจที่กําหนดเองและรายการในไดเรกทอรีที่ระบุโดย
RequiredInputDirectory
และInputWorkingDirectory
. - ชื่อ: ชุด
options.JobName
สําหรับชื่อไฟล์การส่งออกที่คาดการณ์ได้ในชุด - Logging: มอเตอร์เขียน transkrip
.log
ไปยังไดเรกทอรีการส่งออกซึ่งเป็นประโยชน์สําหรับการลบแพคเกจที่หายไปและข้อผิดพลาด LaTeX
เมื่อเลือกรูปแบบอื่น ๆ
PNG เหมาะสําหรับการเผยแพร่เว็บและการรวม UI หากคุณต้องการการส่งออก vector สําหรับ zoom infinite หรือข้อความขนาดเล็กเปลี่ยนไป SVG โดยใช้ SvgSaveOptions
และ A SvgDevice
, หรือเป็น PDF สําหรับเอกสารที่ชําระ กระแสการแปลงยังคงเหมือนกัน
ด้วยรูปแบบเหล่านี้คุณสามารถอัตโนมัติ LaTeX ไปยัง PNG ในระดับ .NET ในขณะที่รักษาการควบคุมเต็มรูปแบบเกี่ยวกับความละเอียดไดเรกทอรีและการจัดการไฟล์