在 Spire.Doc 中插入 HTML 而不是来自 Template.docx 的键
Insert HTML instead of key from Template.docx in the Spire.Doc
我想用 Spire.Doc 从 Template.docx
创建一个 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#
变量?
不幸的是,据我所知,没有一种简单的方法可以用 Spire 做到这一点。 document.Replace 只是将一个字符串替换为您已经发现的另一个字符串。 Spire 程序指南确实建议 solution to this,但它不是特别优雅。
您需要在模板文档中为要替换的文本添加书签。因此,如果您 select 文本 #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.");
我想用 Spire.Doc 从 Template.docx
创建一个 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#
变量?
不幸的是,据我所知,没有一种简单的方法可以用 Spire 做到这一点。 document.Replace 只是将一个字符串替换为您已经发现的另一个字符串。 Spire 程序指南确实建议 solution to this,但它不是特别优雅。
您需要在模板文档中为要替换的文本添加书签。因此,如果您 select 文本 #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.");