在生成简历的过程中,我的做法是首先设计一个word的简历模板,设置好书签,从数据库中读取数据,调用aspose进行填充。一般的数据项包括图片文件都没有问题。
问题出在了HTML字符串上。因为简历中有几个数据项是采用富文本框来进行采集的,采集的结果是以HTML字符串的格式存入数据库中的,如果直接从数据库中提取这样的字符串往word里面填充,word里面显示的就是HTML字符串,显然不是我要的结果。这里需要把HTML字符串解析为文本。一种简单的做法是直接去掉HTML字符串中的HTML标记,这样做的结果是留下来的确实是用户录入的数据内容,但是仅仅是数据内容,文本格式没有的,比如说字体大小、颜色、空格、换行等等都没有了,这样插入word里面之后,可读性很差;在网上找了很多资料,发现一种好办法,那就是调用SautinSoft.HtmlToRtf.dll,这个dll文件能够处理整页HTML文档转换为word文件,也可以将HTML字符串转换为rtf字符串。
为了将HTML字符串转换为带有格式的文本,我的做法是,第一步,将HTML字符串通过SautinSoft.HtmlToRtf.dll里面的方法转换为rtf字符串;第二步,将rtf字符串保存为一个word文件,这样形成的word文件就是有格式的word文本了;第三步,使用aspose读取生成的word文件里面的文本,插入到我最终要生成的简历文档中。
这里要特别注意的一个问题是,我采用的SautinSoft.HtmlToRtf.dll是没有授权的,存在一个转换字符数量的限制(1000000),而且在转换出来的rtf字符串中有他们的版权标记,我对rtf字符进行了分析之后,将rtf字符串中与版权有关的部分去掉了,才算是解决了问题。
private string HtmlTransLate(string strHtmlCode)
{
string temp = "";
if (strHtmlCode != "")
{
SautinSoft.HtmlToRtf h = new SautinSoft.HtmlToRtf();
h.PageStyle.PageSize.Letter();
h.PageStyle.PageMarginLeft.Mm(20f);
string htmlString = "";
string rtfString = "";
htmlString = strHtmlCode;//HTML字符串
rtfString = h.ConvertString(htmlString);//HTML字符串转换为rtf字符串
rtfString = rtfString.Remove(rtfString.Length - 454, 453);//rtf字符串去掉版权信息
string tname = Server.MapPath(@"~/info/test1.doc");
WriteFile(tname, rtfString);//rtf字符串保存到word文件中
Document tempdoc = new Document(Server.MapPath(@"~/info/test1.doc"));//读取生成的word文件
temp = tempdoc.GetText();//得到word文件中的文本内容
}
return temp;
}