1

我想Template.docx用 Spire.Doc 创建一个 Word 文档。为此,我这样编码:

//sample file path
string samplePath = Application.StartupPath + Path.DirectorySeparatorChar + "Template.docx";
//result docs paths
string docxPath = Application.StartupPath + Path.DirectorySeparatorChar + "Result.docx";

按钮提交事件:

private void btnSubmit_Click(object sender, EventArgs e)
{
    //initialize word object
    document = new Document();
    document.LoadFromFile(samplePath);
    //get strings to replace
    Dictionary<string, string> dictReplace = GetReplaceDictionary();
    //Replace text
    foreach (KeyValuePair<string, string> kvp in dictReplace)
    {
        document.Replace(kvp.Key, kvp.Value, true, true);
    }
    //Save doc file.
    document.SaveToFile(docxPath, FileFormat.Docx);
    document.Close();

}

最后是GetReplaceDictionary()方法的内容:

Dictionary<string, string> GetReplaceDictionary()
{
    Dictionary<string, string> replaceDict = new Dictionary<string, string>();
    replaceDict.Add("#name#", txtName.Text.Trim());
    replaceDict.Add("#age#",txtAge.Text);
    replaceDict.Add("#address#", txtAddress.Text.Trim());
    replaceDict.Add("#phonenumber#",txtPhonenumber.Text);
    replaceDict.Add("#emailaddress#",txtEmailaddress.Text);
    replaceDict.Add("#experience#", txtExperience.Text.Trim());
    replaceDict.Add("#position#", txtPosition.Text.Trim());
    replaceDict.Add("#salary#", txtSalary.Text);
    replaceDict.Add("#applydate#",dateTimePicker.Text);
    string isEmployed= this.radio_isEmployed_Yes.Checked ? "Yes" : "No";
    replaceDict.Add("#isemployed#", isEmployed);
    replaceDict.Add("#education#", txtEducation.Text.Trim());

    return replaceDict;
}

我想写这样的工作经验文本框:

Lorem ipsum <b>dolor sit amet</b>, consectetur <i>adipiscing</i> elit.

这是屏幕: 在此处输入图像描述

我想在 word 文档中显示dolor sit amet为粗体和adipiscing斜体,如下所示: 在此处输入图像描述

但不幸的是,HTML 标记在 Word 文档中显示如下: 在此处输入图像描述

这是我的Template.docx文件: 在此处输入图像描述

如何正确显示 HTML 文本而不是#experience#变量?

4

1 回答 1

1

不幸的是,据我所知,没有一个简单的方法可以用 Spire 做到这一点。document.Replace 只是用您已经发现的另一个字符串替换一个字符串。Spire 程序指南确实提出了一个解决方案,但它并不是特别优雅。

您需要为要替换的文本在模板文档中添加书签。因此,如果您选择文本 #experience# 并将其添加为名为 experience 的书签:

在此处输入图像描述

然后,您可以使用类似下面的函数将文本替换为提供的 html:

public void ReplaceBookmarkHTML(Document doc, string bookmarkName, string htmlString)
    {
        Section tempSection = doc.AddSection();
        tempSection.AddParagraph().AppendHTML(htmlString);

        ParagraphBase replacementFirstItem = tempSection.Paragraphs[0].Items.FirstItem as ParagraphBase;
        ParagraphBase replacementLastItem = tempSection.Paragraphs[tempSection.Paragraphs.Count - 1].Items.LastItem as ParagraphBase;
        TextBodySelection selection = new TextBodySelection(replacementFirstItem, replacementLastItem);
        TextBodyPart part = new TextBodyPart(selection);

        BookmarksNavigator bookmarkNavigator = new BookmarksNavigator(doc);
        bookmarkNavigator.MoveToBookmark(bookmarkName);
        bookmarkNavigator.ReplaceBookmarkContent(part);
        doc.Sections.Remove(tempSection);
    }

然后,您可以像下面这样调用它来让您的 HTML 替换书签:

ReplaceBookmarkHTML(document, "experience", "Lorem ipsum <b>dolor sit amet</b>, consectetur <i>adipiscing</i> elit.");
于 2018-03-24T22:00:12.430 回答