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

格式化文本

在后台插入如下代码

  1.  1     const string css = "style='text-align:justify;"         //两端对齐
  2.  
  3.  2         + "text-justify:inter-ideograph;"
  4.  
  5.  3         + "text-indent: 2em;"                               //首行缩进2字符
  6.  
  7.  4         + "line-height:1.25;"                               //1.25倍行距
  8.  
  9.  5         + "margin-top:0;margin-bottom:0;"                   //段前段后0行
  10.  
  11.  6         + "font-size: 12pt;"                                //字体:小四
  12.  
  13.  7         + "font-family:Times New Roman,宋体;'";              //中文字体:宋体,西文字体:Times New Roman
  14.  
  15.  8 
  16.  
  17.  9 
  18.  
  19.      ASPxHtmlEditor1.Html = "<p " + css + ">";               //段落用标签p标记
  20.  
  21.      for (int i = ; i < ;i++)
  22.  
  23.          ASPxHtmlEditor1.Html += "测试文本123abCD";           //这是内容
  24.  
  25.      ASPxHtmlEditor1.Html += "</p>

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

Word导出及页面设置

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

添加如下引用:

  1.  using DevExpress.XtraRichEdit;
  2.  
  3.  using DevExpress.XtraRichEdit.API.Native;

插入下面两个函数

  1.  1     private void SetPrintOptions(IRichEditDocumentServer richedit)              //设置格式
  2.  2     {
  3.  
  4.  3         foreach (Section _section in richedit.Document.Sections)
  5.  
  6.  4         {
  7.  
  8.  5             _section.Page.PaperKind = System.Drawing.Printing.PaperKind.A4;     //A4纸
  9.  
  10.  6             _section.Page.Landscape = false;                                    //竖版
  11.  
  12.  7             _section.Margins.Left = 295f;                                       //左侧页边距 2.5cm
  13.  
  14.  8             _section.Margins.Right = 295f;
  15.  
  16.  9             _section.Margins.Top = 295f;
  17.  
  18.              _section.Margins.Bottom = 295f;
  19.  
  20.  
  21.  
  22.          }
  23.  
  24.      }
  25.  
  26.  
  27.  
  28.      protected void PushToBrowser(string fileName)                               //导出文件
  29.  
  30.      {
  31.  
  32.  
  33.  
  34.          FileStream fs = new FileStream(fileName, FileMode.Open);
  35.  
  36.          byte[] bytes = new byte[(int)fs.Length];
  37.  
  38.          fs.Read(bytes, , bytes.Length);
  39.  
  40.          fs.Close();
  41.  
  42.          if (File.Exists(fileName))
  43.  
  44.              File.Delete(fileName);
  45.  
  46.  
  47.  
  48.          Response.ContentType = "application/octet-stream";
  49.  
  50.          Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
  51.  
  52.          Response.BinaryWrite(bytes);
  53.  
  54.          Response.Flush();
  55.  
  56.          Response.End();
  57.  
  58.      }

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

  1.  1         string outputFileName = "newtext.doc";            //导出文件的名称
  2.  2 
  3.  
  4.  3         FileStream fs = new FileStream("test.rtf", FileMode.Create);
  5.  
  6.  4         ASPxHtmlEditor1.Export(DevExpress.Web.ASPxHtmlEditor.HtmlEditorExportFormat.Rtf, fs);  //注意此处  先导出Rtf格式
  7.  
  8.  5         fs.Close();
  9.  
  10.  6         fs.Close();
  11.  
  12.  7 
  13.  
  14.  8         RichEditDocumentServer srv = new RichEditDocumentServer();
  15.  
  16.  9         srv.LoadDocument("test.rtf", DocumentFormat.Rtf);
  17.  
  18.          srv.BeginUpdate();
  19.  
  20.          SetPrintOptions(srv);
  21.  
  22.          srv.EndUpdate();
  23.  
  24.          srv.SaveDocument(outputFileName, DocumentFormat.Doc);   //再导出Doc格式  如果导出OpenXml(.Docx)格式,则中文字体丢失
  25.  
  26.  
  27.          if (File.Exists("test.rtf"))
  28.  
  29.              File.Delete("test.rtf");
  30.  
  31.  
  32.  
  33.          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. svn服务器的配置步骤

    1.安装客户端: TortoiseSVN-1.9.3.27038-x64-svn-1.9.3.msi下载地址:http://jaist.dl.sourceforge.net/project/torto ...

  2. 关于动态SQL中的NULL

    declare v_sql ); v_c1 number; v_c2 number; begin v_c2 :; v_sql := 'begin '; v_sql := v_sql||'update ...

  3. poj3071

    题目大意,1<<n个球队比赛赛程是这样的 1 1    1 1   1 1  1 另dp[i][k]为k队进入第i场的概率 #include<iostream> #includ ...

  4. 从零开始制作Minecraft启动器(C++开源)

    从零开始制作Minecraft启动器(C++开源) 新手飙车了~~~,MC启动器源码大放送,随心所欲打造自己的专属MC启动器,这不是易语言,是C++...分析原理,关键源码都有详细的注释,代码编好就打 ...

  5. javascript两种定时器的使用及其清除

    <!--示例代码如下:--><!DOCTYPE html> <html> <body> <p>A script on this page s ...

  6. web移动开发的小细节(持续添加)

    1.触屏设备上如何去掉数字转化为拨号链接的方法 <meta name=”format-detection” content=”telephone=no” /> telephone=no就禁 ...

  7. JavaScript进阶学习的一些建议

    blankyao最近问我如何学习JavaScript,他觉着在理解了JavaScript的语法之后,不知如何去学习JavaScript了. 其实我也是个JavaScript小菜,最近在开发中遇到不少关 ...

  8. 内核参数优化之2-1 tcp/ip 标志位报文解析

    以下内容纯属虚构,切勿轻易相信! 众所周知,tcp/ip三次握手和四次挥手,均由syn/ack/fin三个标志位报文决定,但是这三个标志位报文,并不是说在构建连接的时候只发送一次的,因为协议不知道网络 ...

  9. Robot Framework自动化测试环境的搭建

    1.python-2.7.6.amd64.1394777203.msi 2.setuptools-28.0.0 3.pip-8.1.1 4.robotframework-2.8.7.win-amd64 ...

  10. iTween_ValueTo函数

    ValueTo:返回一个插值在两件值之间的值供回调函数使用; 网上没找到例子,自己试了下,直接看代码就明白了. , 0, 0),// gameObject.transform.position为0.0 ...