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

格式化文本

在后台插入如下代码

 1     const string css = "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:Times New Roman,宋体;'";              //中文字体:宋体,西文字体:Times New Roman

 8 

 9 

     ASPxHtmlEditor1.Html = "<p " + css + ">";               //段落用标签p标记

     for (int i = ; i < ;i++)

         ASPxHtmlEditor1.Html += "测试文本123abCD";           //这是内容

     ASPxHtmlEditor1.Html += "</p>

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

Word导出及页面设置

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

添加如下引用:

 using DevExpress.XtraRichEdit;

 using DevExpress.XtraRichEdit.API.Native;

插入下面两个函数

 1     private void SetPrintOptions(IRichEditDocumentServer richedit)              //设置格式
 2     {  3         foreach (Section _section in richedit.Document.Sections)  4         {  5             _section.Page.PaperKind = System.Drawing.Printing.PaperKind.A4;     //A4纸  6             _section.Page.Landscape = false;                                    //竖版  7             _section.Margins.Left = 295f;                                       //左侧页边距 2.5cm  8             _section.Margins.Right = 295f;  9             _section.Margins.Top = 295f;              _section.Margins.Bottom = 295f;            }      }        protected void PushToBrowser(string fileName)                               //导出文件      {            FileStream fs = new FileStream(fileName, FileMode.Open);          byte[] bytes = new byte[(int)fs.Length];          fs.Read(bytes, , bytes.Length);          fs.Close();          if (File.Exists(fileName))              File.Delete(fileName);            Response.ContentType = "application/octet-stream";          Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));          Response.BinaryWrite(bytes);          Response.Flush();          Response.End();      }

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

 1         string outputFileName = "newtext.doc";            //导出文件的名称
 2   3         FileStream fs = new FileStream("test.rtf", FileMode.Create);  4         ASPxHtmlEditor1.Export(DevExpress.Web.ASPxHtmlEditor.HtmlEditorExportFormat.Rtf, fs);  //注意此处  先导出Rtf格式  5         fs.Close();  6         fs.Close();  7   8         RichEditDocumentServer srv = new RichEditDocumentServer();  9         srv.LoadDocument("test.rtf", DocumentFormat.Rtf);          srv.BeginUpdate();          SetPrintOptions(srv);          srv.EndUpdate();          srv.SaveDocument(outputFileName, DocumentFormat.Doc);   //再导出Doc格式  如果导出OpenXml(.Docx)格式,则中文字体丢失
           if (File.Exists("test.rtf"))              File.Delete("test.rtf");            PushToBrowser(outputFileName);

输出的文本如下:

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

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

DevExpress ASPxHtmlEditor控件格式化并导出Word (修复中文字体导出丢失)的更多相关文章

  1. Devexpress TreeList控件绑定显示父子节点对像

    今天一位同事咨询Devexpress TreeList控件绑定自动显示父子节点对像,但结果是不会显示带父子节点关系,而是将所有的节点作为父节点显示出来了,对像类的代码如下 public class I ...

  2. DevExpress 用户控件 分页(上)

    说明:使用用户控件分页,完成后,使用时非常简单,数据绑定,调用自己写的一个事件就OK了 前期准备工作: (1)添加一个用户控件 命名PageCtrl (2)打开代码:   [csharp] view ...

  3. DevExpress 用户控件 分页(中)

    说明: 1)具体调用请关注 看DevExpress 用户控件 分页(下) datanavi_ButtonClick 是DataNavigator的ButtonClikc事件 视图设计器: 分页用户控件 ...

  4. DevExpress.LookUpEdit控件实现自动搜索定位功能 兼使用方法(looUpEdit可编辑)

    DevExpress.LookUpEdit 使用方法 设置可手动输入 this.LookUpEdit1.Properties.TextEditStyle = DevExpress.XtraEditor ...

  5. devexpress表格控件gridcontrol图片列,按钮列,时间列等特殊列的实现

    1.项目中经常会在表格中插入按钮列,图片列,表格列一些非文本的特殊列.如何在devexpress表格控件gridcontrol中实现呢?以下列举一个实现添加图片列,按钮列,时间列,按钮列,开关列的示例 ...

  6. 详解DevExpress.LookUpEdit控件实现自动搜索定位功能(转)

    转载自csdn博客 爱拼才会赢 的博客 地址是详解DevExpress.LookUpEdit控件实现自动搜索定位功能(转)

  7. DevExpress WPF控件记录

    以下是博主用到DevExpress WPF控件时的一些记录笔记: 1.Canvas控件:Canvas控件的背景色一定要设置(background="Transparent"),不然 ...

  8. Qt编写控件属性设计器5-属性中文

    一.前言 在上一篇文章中就提到过,使用qtpropertybrowser来加载属性,对应加载到的属性是英文的,也就是控件类中Q_PROPERTY描述的变量名称,如何变成中文或者其他语言显示呢?这个就需 ...

  9. DevExpress某些控件继承后的可编辑性

    今天在使用DevExpress的BarManager菜单控件时,发现在进行继承时无法在继承的子类窗体中对其进行编辑与修改,另外像GridView也有类似的情形,后来查阅资料后,现在可通过DevExpr ...

随机推荐

  1. SQL Server 如何创建定时作业

    在做SQL server 管理时,往往需要每日执行定时任务,但是如果每天都去人工执行,非常不方便,而且一般定时操作,都应该是在数据库压力不大时,一般是在夜间.所以我们需要创建定时作业来代替人工的执行定 ...

  2. openfire spark 二次 开发 服务插件

    ====================  废话 begin   ============================ 最近老大让我为研发平台增加即时通讯功能.告诉我用comet 在web端实现即 ...

  3. ECSTORE验证码优化

    用ecstore的朋友应该知道,ecstore的验证码超级鸡肋. 特别是字母和数字混合,根本就看不懂写的是什么? 数字还好,但是字母就别提了.而且还小. 索性就把验证码换掉.研究一下发现,ecstor ...

  4. CSS - 针对不同浏览器的写法

    火狐浏览器: @-moz-document url-prefix() { /*这段区域的样式代码只在firefox起作用*/ .x{ width: 100px; height: 100px; back ...

  5. WPF异常“调用线程无法访问此对象,因为另一个线程拥有该对象 ”

    WPF中在对界面进行操作的时候,可能会遇到"调用线程无法访问此对象,因为另一个线程拥有该对象"异常,这是因为WPF中只有UI线程才能操作UI元素,非UI线程要访问UI时就会报异常了 ...

  6. 使用NSTimer实现倒计时-备

    今天在CocoaChina上面看到有人在问倒计时怎么做,记得以前在看Iphone31天的时候做过一个,今天翻出来运行不了了,原因是我的IphoneSDK升级到3.1了,以前使用的是2.2.1,在2.2 ...

  7. [每日一题JS] 正则表达式

    判断字符串是否是这样组成的,第一个必须是字母,后面可以是字母.数字.下划线,总长度为5-20 var reg = /\b[a-zA-Z]{1}[a-zA-Z0-9_]{4,19}\b/; var fl ...

  8. GDB调试GCC(jRate)

    1.前提是build GCC的时候要修改makefile,在configure之后生成的makefile忠,将CFLAGS和CFLAGS_FOR_BUILD改成-g3 -O0.. 2.在root用户下 ...

  9. redis maxmemory设置

    关于maxmemory的设置,如果redis的应用场景是作为db使用,那不要设置这个选项,因为db是不能容忍丢失数据的. 如果作为cache使用,则可以启用这个选项(其实既然有淘汰策略,那就是cach ...

  10. apache 启动不了

    netstat -ano|findstr "443" 发现443端口被占 记录下443端口对应的PID 进入任务管理器,查看进程,发现为一个叫做vmware-hostd.exe的进 ...