Lisa.Li wrote:Hello,
你好,感谢你提供更详细的信息参考,我们目前还没有接口针对markdown 转docx过程中直接对不同标题层级设置样式。但是我们产品可以添加样式,修改样式等,针对你的需求实现也比较方便。如下示例代码
- Code: Select all
Document doc = new Document();
//doc = new Document(@"Doc.md");
doc = new Document(@"input.docx");
ReplaeImgPara(doc);
//设置图片段落样式
ParagraphStyle style = new ParagraphStyle(doc);
style.Name = "ImgParaStyle";
style.CharacterFormat.FontName = "楷体";
style.CharacterFormat.FontSize = 12;
style.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center;
doc.Styles.Add(style);
foreach (Spire.Doc.Section section in doc.Sections)
{
//遍历段落
for (int i=0; i< section.Paragraphs.Count; i++)
//foreach (Paragraph paragraph in section.Paragraphs)
{
Paragraph paragraph = section.Paragraphs[i];
//判断段落样式
if (paragraph.StyleName == "Heading1")
{
paragraph.GetStyle().CharacterFormat.FontName = "雅黑";
paragraph.GetStyle().CharacterFormat.FontSize= 24;
paragraph.GetStyle().CharacterFormat.TextColor = Color.Blue;
paragraph.GetStyle().ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center;
}
if (paragraph.StyleName == "Heading2")
{
paragraph.GetStyle().CharacterFormat.FontName = "黑体";
paragraph.GetStyle().CharacterFormat.FontSize = 18;
paragraph.GetStyle().CharacterFormat.TextColor = Color.Red;
paragraph.GetStyle().CharacterFormat.Italic = false;
paragraph.GetStyle().ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Left;
}
if (paragraph.StyleName == "Normal" && HasImg(paragraph))
{
paragraph.ApplyStyle("ImgParaStyle");
}
if (paragraph.StyleName == "Normal" && !HasImg(paragraph))
{
paragraph.GetStyle().CharacterFormat.FontName = "楷体";
paragraph.GetStyle().CharacterFormat.FontSize = 12;
paragraph.GetStyle().ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Left;
}
}
}
doc.SaveToFile(@"out.docx", FileFormat.Docx2016);
}
static bool HasImg(Paragraph paragraph)
{
//判断段落内容是否是图片
for (int m = 0; m < paragraph.ChildObjects.Count; m++)
{
DocumentObject docObj = paragraph.ChildObjects[m];
if (docObj.DocumentObjectType == DocumentObjectType.Picture)
{
return true;
}
}
return false;
}
static void ReplaeImgPara(Document doc)
{
foreach (Spire.Doc.Section section in doc.Sections)
{
//遍历段落
for (int i = 0; i < section.Paragraphs.Count; i++)
{
Paragraph paragraph = section.Paragraphs[i];
for (int m = 0; m < paragraph.ChildObjects.Count; m++)
{
DocumentObject docObj = paragraph.ChildObjects[m];
if (docObj.DocumentObjectType == DocumentObjectType.Picture)
{
//图片单独添加到段落中
Spire.Doc.Documents.Paragraph para = new Spire.Doc.Documents.Paragraph(doc);
DocPicture picture = (DocPicture)docObj;
picture.TextWrappingStyle = TextWrappingStyle.Inline;
para.ChildObjects.Insert(0, picture);
section.Paragraphs.Insert(i, para);
paragraph.ChildObjects.Remove(docObj);
}
}
}
}
}
因目前.md 文件url 图片转换还有显示问题,我这里先直接将你.md 文件转换到docx 格式作为输入测试文档。后期待SPIREDOC-11072修复后,就可以直接加载原始.md 文件。
Sincerely,
Lisa
E-iceblue support team
感谢, 看了一下效果, 不错!
但是, 强烈建议后期能直接对不同标题层级进行预设置的样式, 因为md的构成对象相比word要很少很多, 也简单很多, 预设格式选项, 实现起来要优雅多了, 已经有组件支持这种方式(在转换前预设置格式),
下面内容供参考, 能对下面几类对象进行格式预设就够用了,不复杂:
markdown结构对象包括以下几类:
1. 标题 (Headers)
使用 # 来表示不同级别的标题。共6个级别(从 # 到 ######)。
2. 正文段落 (Paragraphs)
多个段落之间用空行隔开。
3. 列表 (Lists)
无序列表 (Unordered List):使用 *、+ 或 - 来创建。
有序列表 (Ordered List):使用数字加点 1.、2. 等来创建。
4. 代码 (Code)
内联代码 (Inline Code):使用反引号 ` 包裹。
代码块 (Code Block):使用三个反引号 ```,也可以指定语言来进行语法高亮。
5. 图片 (Images)
6. 表格 (Tables)