为有中文需求的客户提供多渠道中文技术支持.

Tue Aug 26, 2025 7:57 am

附件中的T2.docx文件是从原 T0.md 文件用spire.Doc代码转换而来的, 再把T2.docx 转换为T2.md文件后, 遇到如下问题:
1.转换后的md换行符不一致了, 有cr换行的, 还有crlf换行的
2.很多行的末尾多加了一个空格
3.很多**符号的前后多加了一个空格
3.很多`符号前多加了一个空格
4.列表中的正文缩进丢失, 空格丢失
5.多出来很多空行
这些问题很多是因为转换过程中没有考虑空格缩进的级别而导致的!
比较t0.md和t2.md很容易发现问题, 怎样在转换中控制这些细节?

Code: Select all
using Spire.Doc;

Environment.CurrentDirectory = @"C:\Users\Administrator\Desktop\_Test";
var doc = new Document();

//dm转docx
doc.LoadFromFile("T0.md", FileFormat.Markdown);
doc.SaveToFile("T2.docx", FileFormat.Docx);

//docx转md
doc.LoadFromFile("T2.docx", FileFormat.Docx);
doc.SaveToFile("T2.md", FileFormat.Markdown);

doc.Close();


xyzxyzxyz
 
Posts: 64
Joined: Fri Dec 27, 2024 1:10 pm

Tue Aug 26, 2025 10:18 am

您好,
谢谢您的询问。
我复现了您的问题并将其记录到我们的bug跟踪系统中,追踪编号为SPIREDOC-11502。我们的开发团队将进一步调查并修复它,一旦它有任何更新,我会立即通知您。对您造成的不便我们深表歉意。
Sincerely,
Talia
E-iceblue support team
User avatar

talia.liu
 
Posts: 341
Joined: Mon Apr 14, 2025 3:33 am

Wed Aug 27, 2025 2:55 am

talia.liu wrote:您好,
谢谢您的询问。
我复现了您的问题并将其记录到我们的bug跟踪系统中,追踪编号为SPIREDOC-11502。我们的开发团队将进一步调查并修复它,一旦它有任何更新,我会立即通知您。对您造成的不便我们深表歉意。


非常感谢您的回复!
我有一个简单的功能需求, 不知能否实现, 描述如下:
在从T0.md转换为T2.docx过程中, 我想删除所有(标题级别, 多层列表)文本中的加粗修饰符(**)和内联代码修饰符(`), 但是代码块```中的缩进和内部文本不要修改!
提醒: 上述功能需求的本质是删除标题和列表中成对儿的**和`, 但不能处理代码块```中的文本, 同时在处理过程中不能删除行前的缩进(空格), 例如最下面示例:
注意: 示例中的代码块中的第2和第3行前实际上是只有1个空格的(之前的4个空格是缩进), 因为它们是(列表下, 代码块```内)的文本, ```符号左侧有4个空格!
我的想法: 如果从T0.md转换为T2.docx无法实现上述功能, 那就在T2.docx转换为T2.md的过程中实现!(可能需要先解决最上面的bug?)

pic.png

xyzxyzxyz
 
Posts: 64
Joined: Fri Dec 27, 2024 1:10 pm

Wed Aug 27, 2025 9:13 am

您好,

感谢您的询问。

关于修改 Markdown 文件中文本格式的需求,将其转换为word文件进行修改再转换为markdown 文件的方案是可行的,针对您的具体需求,可以参考以下代码示例:
Code: Select all
           Document doc = new Document();
           doc.LoadFromFile(@"T2.docx", FileFormat.Docx);
            foreach (Section section in doc.Sections)
            {
                foreach (Paragraph paragraph in section.Paragraphs)
                {
                    foreach (TextRange textRange in paragraph.ChildObjects.OfType<TextRange>())
                    {
                        Console.WriteLine(textRange.CharacterFormat.Style.Name);
                        if (textRange.CharacterFormat.Bold)
                        {
                            // 移除加粗格式
                            textRange.CharacterFormat.Bold = false;
                        }

                        if (textRange.CharacterFormat.Style.Name== "InlineCode")
                        {
                           // 处理内联代码样式
                            textRange.CharacterFormat.ClearFormatting();
                        }
                    }
                }
            }
            doc.SaveToFile("T3.docx", FileFormat.Docx);
            doc.SaveToFile("T3.md", FileFormat.Markdown);

其中需要注意的是textRange.CharacterFormat.Style.Name== "InlineCode" 中InlineCode指的是您的markdown 文件中的带有内联代码修饰符(`)的文本的样式名,您在测试中需要根据文件进行调整。基于您之前提供的文件进行测试,结果(详见附件)基本符合预期。目前存在的空格和缩进问题,需要等待问题SPIREDOC-11502修复后进一步调整。期待您的测试反馈。
Sincerely,
Talia
E-iceblue support team
User avatar

talia.liu
 
Posts: 341
Joined: Mon Apr 14, 2025 3:33 am

Wed Aug 27, 2025 10:40 am

感谢回复!
估计要等到bug修复后再测试了.
代码块的处理存在问题: 处理后的代码块缩进被删除, 行前空格被删除! 行后多了两个空格! 请注意下图中的代码块!
解决这个问题需要根据代码所在列表的级别(如果在顶级,则不需要缩进),添加与之对应的空格缩进! md在这方面很有规律!
下图中代码块中的多行文字部分的左边实际上是只有1个空格的(最开头的4个空格是缩进), 因为它们是(列表下, 代码块```内)的文本, ```符号左侧有4个空格!
请使用T8.zip附件测试
T8.zip

xyzxyzxyz
 
Posts: 64
Joined: Fri Dec 27, 2024 1:10 pm

Thu Aug 28, 2025 3:24 am

您好,

感谢您的反馈。
使用您的提供文件进行测试,我复现了代码块前后空格与缩进和初始文档不符的问题,我已经将这个问题同步备注到SPIREDOC-11502中,我们的开发人员会进行进一步的调查。一旦有任何进展,我会第一时间通知您。感谢您的耐心与理解。
Sincerely,
Talia
E-iceblue support team
User avatar

talia.liu
 
Posts: 341
Joined: Mon Apr 14, 2025 3:33 am

Wed Sep 10, 2025 9:42 am

您好, 请问支持从md字符串加载md文件吗?
下面代码无效

Code: Select all
// 创建Document类对象
Document doc = new Document();

// 准备Markdown字符串
string markdownContent = """
# 这是标题

这是段落内容。

- 列表项1
- 列表项2
- 列表项3

**粗体文本** *斜体文本*
""";

// 将Markdown字符串转换为内存流
using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(markdownContent)))
{
   // 从流中加载Markdown内容
   doc.LoadFromStream(stream, FileFormat.Markdown);
}

// 将文档保存为Word格式
doc.SaveToFile("fromString.docx", FileFormat.Docx);
doc.Close();

xyzxyzxyz
 
Posts: 64
Joined: Fri Dec 27, 2024 1:10 pm

Wed Sep 10, 2025 10:54 am

Hello,

你好,
感谢你的来信,目前测试我的确遇到System.NotSupportedException:“The file format cannot be supported.”问题,这个问题我已经以编号SPIREDOC-11541提交到了我们问题系统中,我们研发同事会进一步调查修复此问题,一旦解决我们会提供给你修复优化版本。感谢你的理解。

Sincerely,
Lisa
E-iceblue support team
User avatar

Lisa.Li
 
Posts: 1537
Joined: Wed Apr 25, 2018 3:20 am

Fri Oct 24, 2025 11:44 am

Hello,

感谢您耐心等待。
包含SPIREDOC-11541问题修复版本已经发布,请使用新版本(Spire.Doc version:13.10.3)进行测试。
网站下载链接:https://www.e-iceblue.com/Download/download-word-for-net-now.html
Nuget下载链接:
https://www.nuget.org/packages/Spire.Doc/13.10.3
https://www.nuget.org/packages/Spire.Docfor.NETStandard/13.10.3

Sincerely,
Lisa
E-iceblue support team
User avatar

Lisa.Li
 
Posts: 1537
Joined: Wed Apr 25, 2018 3:20 am

Return to 中文技术支持