我正在使用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:"Calibri",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标记中指定的样式。
答案 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);