转载

DevExpress ASPxHtmlEditor控件格式化并导出Word

在前台页面中先插入一个 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

10 ASPxHtmlEditor1.Html =  " <p  " + css +  " > " ;                // 段落用标签p标记
11 for ( int i =  0 ; i <  30 ;i++)

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

</p>

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

Word导出及页面设置

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

添加如下引用:

1 using DevExpress.XtraRichEdit;

2

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;

10 _section.Margins.Bottom = 295f;

11

12 }

13 }

14

15 protected void PushToBrowser( string fileName)                                // 导出文件
16 {

17

18 FileStream fs =  new FileStream(fileName, FileMode.Open);

19 byte [] bytes =  new byte [( int )fs.Length];

20 fs.Read(bytes,  0 , bytes.Length);

21 fs.Close();

22 if (File.Exists(fileName))

23 File.Delete(fileName);

24

25 Response.ContentType =  " application/octet-stream " ;

26 Response.AddHeader( " Content-Disposition "" attachment; filename= " + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));

27 Response.BinaryWrite(bytes);

28 Response.Flush();

29 Response.End();

30

}

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

1           string  outputFileName =  " newtext.docx " ;             // 导出文件的名称

2

3 FileStream fs =  new FileStream( " test.docx " , FileMode.Create);

4 ASPxHtmlEditor1.Export(DevExpress.Web.ASPxHtmlEditor.HtmlEditorExportFormat.Docx, fs);

5 fs.Close();

6 fs.Close();

7

8 RichEditDocumentServer srv =  new RichEditDocumentServer();

9 srv.LoadDocument( " test.docx " , DocumentFormat.OpenXml);

10 srv.BeginUpdate();

11 SetPrintOptions(srv);

12 srv.EndUpdate();

13 srv.SaveDocument(outputFileName, DocumentFormat.OpenXml);

14

15 if (File.Exists( " test.docx " ))

16 File.Delete( " test.docx " );

17

18

PushToBrowser(outputFileName);

输出的文本如下:

DevExpress ASPxHtmlEditor控件格式化并导出Word

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

DevExpress ASPxHtmlEditor控件格式化并导出Word

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

正文到此结束
Loading...