使用尖顶生成word文档时覆盖html样式

时间:2017-11-03 06:47:25

标签: c# ms-word spire

我正在使用Spire使用C#后端生成Word文档。我有几个HTML字段存储为数据库中的字符串,我需要在Word文档中生成段落。以下是我用来从循环中生成特定字段的代码:

 Spire.Doc.Documents.Paragraph solution = section.AddParagraph();                                
 solution.AppendHTML(inv.solutionResponse);

inv.solutionResponse这是一个基本上是HTML的字符串,以下是一个示例:

<p><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif; mso-fareast-font-family:Calibri;mso-bidi-font-family:Calibri;background:yellow; mso-ansi-language:EN-AU;mso-fareast-language:ZH-CN;mso-bidi-language:AR-SA">ABCD</span><br></p><p>Some other text</p> 

其中一些字段具有上面示例中给出的自定义样式。如何覆盖自定义格式并在这些格式上应用默认格式。我最关心的是字体大小和字母。我尝试按如下方式创建自定义样式:

p1 = new ParagraphStyle(doc);
p1.Name = "StylePara1";
p1.CharacterFormat.TextColor = Color.Black;
p1.CharacterFormat.FontSize = 12;
p1.CharacterFormat.FontName = "Arial Narrow";
doc.Styles.Add(p1);

然后将其应用于上述段落:

solution.ApplyStyle(p1.Name); 

但生成的文档仍包含HTML标记中指定的样式。

1 个答案:

答案 0 :(得分:0)

在Word中,当您将样式应用于段落的某个部分,然后将另一个样式应用于整个段落时,之前的样式将无法更改。为此,您需要先清除所有样式,然后应用自定义样式。请尝试以下代码,看看它是否有效:

Document doc = new Document();
    Section sec = doc.AddSection();
    Paragraph para = sec.AddParagraph();
    string s = "<p><span style=\"font-size:11.0pt; font-family:Calibri;\">ABCD</span><br></p><p>Some other text</p> ";
    para.AppendHTML(s);

    foreach (var item in para.Items)
    {
        if(item is TextRange)
        { 
        TextRange tr = item as TextRange;
        tr.CharacterFormat.ClearFormatting();
        }
    }
    ParagraphStyle p1 = new ParagraphStyle(doc);
    p1.Name = "StylePara1";
    p1.CharacterFormat.TextColor = Color.Red;
    p1.CharacterFormat.FontSize = 50; 
    p1.CharacterFormat.FontName = "Arial Narrow";
    doc.Styles.Add(p1);
    para.ApplyStyle(p1.Name);

    doc.SaveToFile(fp.ResultPath + "AppendHtmlSegment.docx", FileFormat.Docx);