首页 > 学院 > 开发设计 > 正文

DevExpress ASPxHtmlEditor控件格式化并导出Word (修复中文字体导出丢失)

2019-11-17 02:13:18
字体:
来源:转载
供稿:网友

DevExPRess aspxHtmlEditor控件格式化并导出Word (修复中文字体导出丢失)

在前台页面中先插入一个ASPxHtmlEditor控件,名为ASPxHtmlEditor1。 我用的Dev版本为14.1

格式化文本

在后台插入如下代码

1conststringCSS="style='text-align:justify;"//两端对齐2+"text-justify:inter-ideograph;"3+"text-indent:2em;"//首行缩进2字符4+"line-height:1.25;"//1.25倍行距5+"margin-top:0;margin-bottom:0;"//段前段后0行6+"font-size:12pt;"//字体:小四7+"font-family:TimesNewRoman,宋体;'"; //中文字体:宋体,西文字体:TimesNewRoman8910ASPxHtmlEditor1.Html="<p"+css+">";//段落用标签p标记11for(inti=0;i<30;i++)12ASPxHtmlEditor1.Html+="测试文本123abCD"; //这是内容13ASPxHtmlEditor1.Html+="</p>

上述代码实现了对文字的格式化,可以基本满足生成一般报告的格式需要。

Word导出及页面设置

对于ASPxHtmlEditor控件,无法直接设置导出Word或其他格式文件的页面(页边距、纸张大小等),需借助RichEditDocumentServer来转存实现。

添加如下引用:

1usingDevExpress.XtraRichEdit;2usingDevExpress.XtraRichEdit.API.Native;

插入下面两个函数

1privatevoidSetPrintOptions(IRichEditDocumentServerrichedit)//设置格式

2{3foreach(Section_sectioninrichedit.Document.Sections)4{5_section.Page.PaperKind=System.Drawing.Printing.PaperKind.A4;//A4纸6_section.Page.Landscape=false;//竖版7_section.Margins.Left=295f;//左侧页边距2.5cm8_section.Margins.Right=295f;9_section.Margins.Top=295f;10_section.Margins.Bottom=295f;1112}13}1415protectedvoidPushToBrowser(stringfileName)//导出文件16{1718FileStreamfs=newFileStream(fileName,FileMode.Open);19byte[]bytes=newbyte[(int)fs.Length];20fs.Read(bytes,0,bytes.Length);21fs.Close();22if(File.Exists(fileName))23File.Delete(fileName);2425Response.ContentType="application/octet-stream";26Response.AddHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode(fileName,System.Text.Encoding.UTF8));27Response.BinaryWrite(bytes);28Response.Flush();29Response.End();30}

在执行导出的事件(如Button_Click事件)中添加如下代码

1stringoutputFileName="newtext.doc";//导出文件的名称

23FileStreamfs=newFileStream("test.rtf",FileMode.Create);4ASPxHtmlEditor1.Export(DevExpress.Web.ASPxHtmlEditor.HtmlEditorExportFormat.Rtf,fs); //注意此处 先导出Rtf格式5fs.Close();6fs.Close();78RichEditDocumentServersrv=newRichEditDocumentServer();9srv.LoadDocument("test.rtf",DocumentFormat.Rtf);10srv.BeginUpdate();11SetPrintOptions(srv);12srv.EndUpdate();13srv.SaveDocument(outputFileName,DocumentFormat.Doc); //再导出Doc格式 如果导出Openxml(.Docx)格式,则中文字体丢失1415if(File.Exists("test.rtf"))16File.Delete("test.rtf");1718PushToBrowser(outputFileName);

输出的文本如下:

p.s.关于页边距设置成cm的换算

试了几组数据,做了个3次拟合,先凑合用吧。(x是期望设置的厘米数 如2.5cm y就是程序的中用到的参数 如295 )

转载请注明出处http://www.VEVb.com/LFDX/p/4688938.html


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表