เรามีความยินดีที่จะประกาศการเปิดตัว GroupDocs.Markdown for .NET 26.3 ซึ่งพร้อมให้ใช้งานตั้งแต่ เดือนมีนาคม 2026 การอัปเดตครั้งสำคัญนี้นำเสนอ API สาธารณะที่ออกแบบใหม่ ตัวเรนเดอร์ Markdown แบบ DOM‑based ที่กำหนดเอง การควบคุมรูปแบบ Markdown อย่างเต็มรูปแบบ การสนับสนุน async และการแก้ไขบั๊กหลายรายการ นอกจากนี้ยังเพิ่มแพ็กเกจ NuGet แบบ runtime แยกตาม TFM และรองรับ .NET 8 และ .NET 10
มีอะไรใหม่ในรุ่นนี้
| Key | Category | Summary |
|---|---|---|
| MARKDOWNNET-33 | Feature | แยกแพ็กเกจ NuGet เป็นแพ็กเกจ runtime แยกตาม TFM |
| MARKDOWNNET-31 | Feature | เพิ่มการรองรับ .NET 8 และ .NET 10 |
| MARKDOWNNET-30 | Feature | ตัวเรนเดอร์ Markdown แบบ DOM‑based ที่กำหนดเอง |
| MARKDOWNNET-29 | Feature | คำเตือนการแปลงและโมเดลข้อผิดพลาดแบบรวม |
| MARKDOWNNET-28 | Feature | เส้นทางรูปภาพแบบ relative และการแทนที่รูปภาพ |
| MARKDOWNNET-27 | Feature | การปรับระดับหัวข้อและการสร้าง YAML front matter |
| MARKDOWNNET-26 | Feature | การควบคุมรูปแบบ Markdown และตัวเลือกการเรนเดอร์สเปรดชีต |
| MARKDOWNNET-25 | Feature | ตรวจสอบเอกสารโดยไม่ต้องแปลง |
| MARKDOWNNET-24 | Feature | API แบบ async |
| MARKDOWNNET-23 | Feature | เมธอดสะดวกสบายแบบ static และการค้นหารูปแบบ |
| MARKDOWNNET-20 | Enhancement | ทบทวนและออกแบบ API ใหม่ |
| MARKDOWNNET-8 | Feature | รองรับการแทนที่รูปภาพระหว่างการแปลงเป็น Markdown |
| MARKDOWNNET-35 | Bug Fix | ปัญหาด้านคุณภาพและการทำงาน |
การเปลี่ยนแปลง API สาธารณะ
ประเภทสาธารณะใหม่
DocumentInfo— ข้อมูลเมตาของเอกสาร (รูปแบบ, จำนวนหน้า, ชื่อเรื่อง, ผู้เขียน, สถานะการเข้ารหัส)MarkdownFlavor— enum สำหรับกำหนดรูปแบบ Markdown ที่ต้องการ (GitHub, CommonMark)IImageSavingHandler— อินเทอร์เฟซสำหรับคอลแบ็กการบันทึกรูปภาพแบบกำหนดเองIUriSavingHandler— อินเทอร์เฟซสำหรับคอลแบ็กการบันทึก URI แบบกำหนดเองGroupDocsMarkdownException— ข้อยกเว้นทั่วไปในการแปลงInvalidFormatException— รูปแบบไฟล์เสียหายหรือไม่รู้จักDocumentProtectedException— รหัสผ่านไม่ถูกต้องหรือขาดหาย
เมธอด static ใหม่บน MarkdownConverter
ToMarkdown(string sourcePath)และ overloads พร้อมLoadOptions/ConvertOptionsToFile(string sourcePath, string outputPath)และ overloadsGetInfo(string sourcePath)และ overloadsGetSupportedFormats()- เวอร์ชัน async:
ToMarkdownAsync,ToFileAsync,GetInfoAsync
เมธอดอินสแตนซ์ใหม่บน MarkdownConverter
GetDocumentInfo()ConvertAsync()และ overloads
คุณสมบัติใหม่บน ConvertOptions
ImageExportStrategy(แทนที่ExportStrategy)UriExportStrategyHeadingLevelOffsetIncludeFrontMatterFlavorMaxColumns,MaxRows,SheetSeparator,IncludeHiddenSheets
คุณสมบัติใหม่บน ConvertResult
Warnings— คำเตือนการแปลงที่ไม่ทำให้การทำงานล้มเหลว
คุณสมบัติใหม่บน ExportImagesToFileSystemStrategy และ CustomImagesStrategy
ImagesRelativePath— ควบคุมเส้นทางที่เขียนในอ้างอิงรูปภาพของ Markdown
เมธอดใหม่บน CustomImageSavingArgs
SetReplacementImage(Stream imageStream)— แทนที่เนื้อหารูปภาพ
ประเภทที่ถูกลบ
IExportStrategy— แทนที่ด้วยIImageExportStrategyและIUriExportStrategyDocumentConverterOptions— เปลี่ยนชื่อเป็นConvertOptionsDocumentConverterResult— เปลี่ยนชื่อเป็นConvertResult
การเปลี่ยนแปลงที่ทำให้เกิดการแตกหัก
ประเภทที่เปลี่ยนชื่อ
| Before | After |
|---|---|
DocumentConverterOptions |
ConvertOptions |
DocumentConverterResult |
ConvertResult |
Enum FileFormat
ค่าระดับครอบครัว (FileFormat.WordProcessing, FileFormat.Spreadsheet) ถูกแทนที่ด้วยรูปแบบเฉพาะ (FileFormat.Docx, FileFormat.Xlsx ฯลฯ) รายการใหม่: FileFormat.Txt, FileFormat.Chm
แยก ConvertOptions และ LoadOptions
ConvertOptions ไม่ได้สืบทอดจาก LoadOptions อีกต่อไป รหัสผ่านและคำแนะนำรูปแบบจะอยู่ใน LoadOptions:
var loadOptions = new LoadOptions(FileFormat.Docx) { Password = "secret" };
var convertOptions = new ConvertOptions { HeadingLevelOffset = 1 };
using var converter = new MarkdownConverter("file.docx", loadOptions);
var result = converter.Convert(convertOptions);
แยกกลยุทธ์รูปภาพและ URI
คุณสมบัติ ExportStrategy เดียวถูกแทนที่ด้วยสองคุณสมบัติที่มีประเภทเฉพาะ:
var options = new ConvertOptions
{
ImageExportStrategy = new ExportImagesToFileSystemStrategy("images"),
UriExportStrategy = new CustomUriExportStrategy(handler)
};
แทนที่ delegate ด้วยอินเทอร์เฟซ
CustomImagesStrategy และ CustomUriExportStrategy ตอนนี้รับอินเทอร์เฟซ IImageSavingHandler และ IUriSavingHandler แทนการใช้ callback delegate
LoadOptions.Extension และ LoadOptions.MimeType เป็น internal
ใช้ new LoadOptions(FileFormat.Docx) แทนการตั้งค่า Extension หรือ MimeType โดยตรง
ฟีเจอร์ใหม่
ตัวเรนเดอร์ Markdown แบบ DOM‑Based ที่กำหนดเอง
ไลบรารีไม่ต้องพึ่งพาการส่งออก Markdown ของบุคคลที่สามอีกต่อไป ตัวเรนเดอร์แบบกำหนดเองจะเดินผ่านโหนดของโมเดลวัตถุเอกสารทีละโหนดและสร้าง Markdown โดยตรง ทำให้คุณควบคุมทุกแง่มุมของผลลัพธ์ได้อย่างเต็มที่
เอกสาร Word/PDF/Ebook/Text/CHM จะถูกเรนเดอร์พร้อมรองรับย่อหน้า, หัวข้อ (H1‑H6), ตัวหนา, ตัวเอียง, ขีดทับ, โค้ดในบรรทัด, รายการลำดับและไม่มีลำดับพร้อมการซ้อนกัน, ตาราง (ไวยากรณ์ pipe ของ GFM หรือ fallback เป็นบล็อกโค้ดของ CommonMark), ลิงก์, และรูปภาพ
สเปรดชีต จะถูกเรนเดอร์ด้วยการเดินผ่านกริดเซลล์‑ต่อ‑เซลล์, การจัดรูปแบบค่าตามประเภท, ส่วนของเวิร์กชีต, การตัดคอลัมน์/แถวพร้อมตัวบ่งชี้จุดไข่ปลา, การกรองชีตที่ซ่อน, และตัวแบ่งชีตแบบกำหนดเอง
เมธอดสะดวกสบายแบบ static
เมธอดแปลงแบบบรรทัดเดียวที่จัดการการจัดการทรัพยากรโดยอัตโนมัติ:
string md = MarkdownConverter.ToMarkdown("report.docx");
MarkdownConverter.ToFile("report.docx", "report.md");
IReadOnlyList<FileFormat> formats = MarkdownConverter.GetSupportedFormats();
API แบบ async
เมธอด async สำหรับเมธอด static และอินสแตนซ์ทั้งหมด พร้อมรองรับ CancellationToken:
string md = await MarkdownConverter.ToMarkdownAsync("report.docx");
await MarkdownConverter.ToFileAsync("large.pdf", "output.md");
DocumentInfo info = await MarkdownConverter.GetInfoAsync("report.docx");
ตรวจสอบเอกสารโดยไม่ต้องแปลง
ดึงข้อมูลเมตาของเอกสารโดยไม่ต้องทำการแปลงเต็มรูปแบบ:
DocumentInfo info = MarkdownConverter.GetInfo("report.docx");
Console.WriteLine($"{info.FileFormat}, {info.PageCount} pages, by {info.Author}");
การควบคุมรูปแบบ Markdown
กำหนดรูปแบบ Markdown ที่ต้องการ:
var options = new ConvertOptions { Flavor = MarkdownFlavor.GitHub }; // ตาราง pipe, ขีดทับ
var options = new ConvertOptions { Flavor = MarkdownFlavor.CommonMark }; // ตารางเป็นบล็อกโค้ด
ตัวเลือกการเรนเดอร์สเปรดชีต
ควบคุมการเรนเดอร์สเปรดชีตเป็น Markdown อย่างเต็มที่:
var options = new ConvertOptions
{
MaxColumns = 8,
MaxRows = 50,
SheetSeparator = "\n---\n",
IncludeHiddenSheets = false
};
การปรับระดับหัวข้อและ YAML Front Matter
var options = new ConvertOptions
{
HeadingLevelOffset = 2, // # Title -> ### Title
IncludeFrontMatter = true // เพิ่มเมตา YAML ด้านหน้า
};
คำเตือนการแปลงและโมเดลข้อผิดพลาดแบบรวม
เมธอด Convert() ทั้งหมดจะโยนข้อยกเว้นเมื่อเกิดความล้มเหลว ConvertResult จะบรรจุคำเตือนที่ไม่ทำให้การทำงานล้มเหลว:
ConvertResult result = converter.Convert();
foreach (string w in result.Warnings)
Console.WriteLine(w); // เช่น "Worksheet 'Data' truncated at 50 rows."
การแทนที่รูปภาพและเส้นทางแบบ relative
แทนที่รูปภาพระหว่างการแปลงและควบคุมการอ้างอิงเส้นทาง:
var strategy = new ExportImagesToFileSystemStrategy("c:/output/images")
{
ImagesRelativePath = "images" // 
};
การเรนเดอร์สารบัญ (Table of Contents)
เอกสารที่มีสารบัญจะถูกเรนเดอร์เป็นรายการที่เรียบง่ายแทนการแสดงโค้ดฟิลด์ดิบ:
- Introduction
- 1. Executive Summary
- 2. Company Overview
ตัวอย่างโค้ด
string md = MarkdownConverter.ToMarkdown("report.docx");
MarkdownConverter.ToFile("report.docx", "report.md");
IReadOnlyList<FileFormat> formats = MarkdownConverter.GetSupportedFormats();
วิธีรับอัปเดต
NuGet
อัปเกรดเป็นแพ็กเกจ GroupDocs.Markdown เวอร์ชันล่าสุดผ่าน NuGet (เช่น Install-Package GroupDocs.Markdown)