0

我正在使用 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 标签中指定的样式。

4

1 回答 1

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);
于 2017-11-06T06:50:35.333 回答