您的位置:首页 > Web前端 > HTML

怎样在报表中显示HTML/RTF内容系列之二-将HTML内容存储为RTF格式

2009-10-21 10:58 519 查看
首先声明,本系列从本节开始,没有特别说明的情况下均是以SQL Server 2005和Reporting Service 2005为基础展开的讨论。
将HTML内容存储为RTF格式,在基于.NET架构下有很多免费和付费控件可以参考,有基于JavaScript编写的,也有基于WinForm下的RichTextBox集成的。如下简单介绍几种常见的Web页面下使用的RichTextBox.
1) FreeTextBox。免费控件,官方网站是http://freetextbox.com/default.aspx ,根据官方网的介绍,FreeTextBox目前是免费的RichTextBox中使用排列在第一位的控件。很多著名的开源项目都是使用的该控件作为编辑Rich Text格式的文本的首选,例如, Community Server 和DotNetNuke,应用相当广泛。关于FreeTextBox的使用,可以参考 初试牛刀的收获-freetextbox的应用 http://www.cnblogs.com/creazygirl/archive/2006/06/19/429607.html 2) EasyRT。免费控件,官方网站是 http://www.easyui.org.cn/ ,EasyRT是基于WEB前端JavaScript框架轻量级的Rich Text文本编辑器。广泛应用于基于W3C标准的应用中。关于EasyRT的使用,可以参考官网的演示 。
3)RichTextBox for ASP.Net 1.1免费控件,CodeProject上的开源控件,URL地址是http://www.codeproject.com/KB/aspnet/RichTextBox.aspx。简单实用,轻量级的Rich Text格式文本编辑器,可以继承到ASP.NET下的各种应用。
4) Cute Editor。付费控件,官方网站是http://cutesoft.net/http://www.richtextbox.com/default.htm ,相比于前面几种免费控件而言,Cute Editor的功能更加强大,支持多种格式的转换,性能和效率也很优越。关于CuteEditor的配置可以参考cuteeditor详细设置http://blog.csdn.net/w809026418/archive/2009/09/01/4508072.aspx,关于使用可以参考官网发布的开发手册。
本文中主要使用CuteEditor6.4来实现对HTML格式的转换。前面提到,对于HTML格式的转换,主要是调用CuteEditor.dll中的CuteEditor.Convertor.RTF.HTML2RTF类来实现。对于转换,有两种实现方式。
前端应用程序转换
前端程序转换主要通过应用程序后台调用CuteEditor.Convertor.RTF.HTML2RTF类,将HTML内容转换为RTF格式内容,然后存储到数据库服务器中。示例代码如下:
string strRTF = string.Empty;
CuteEditor.Convertor.RTF.HTML2RTF html2rtf = new CuteEditor.Convertor.RTF.HTML2RTF(Editor1.Text);
strRTF = html2rtf.RTF;


using System;
using System.Collections.Generic;
using System.Text;
using CuteEditor;

namespace XXX.Framework.CLR
{
public class HTMLAndRTFConverter
{
/// <summary>
/// Convert HTML code to Rich Text Format string.
/// </summary>
/// <param name="strHTML"></param>
/// <returns></returns>
public static string ConvertHTMLToRTFString(string strHTML)
{
string strRtnVal = string.Empty;
if (!string.IsNullOrEmpty(strHTML))
{
CuteEditor.Convertor.RTF.HTML2RTF html2rtf = new CuteEditor.Convertor.RTF.HTML2RTF(strHTML);
strRtnVal = html2rtf.RTF;
}//end of strHTML is empty.
return strRtnVal;
}//end of ConvertHTMLToRTFString

/// <summary>
/// Convert RTF string to HTML string.
/// </summary>
/// <param name="strHTML"></param>
/// <returns></returns>
public static string ConvertRTFToHTMLString(string strRTF)
{
string strRtnVal = string.Empty;
if (!string.IsNullOrEmpty(strRTF))
{
CuteEditor.Convertor.RTF.RTF2HTML rtf2html = new CuteEditor.Convertor.RTF.RTF2HTML(strRTF);
strRtnVal = rtf2html.ParseRTF();
}//end of strHTML is empty.
return strRtnVal;
}//end of ConvertHTMLToRTFString

}//end  of class
}//end of namespace.

然后编译成HTMLAndRTFConverter.DLL.
创建Assembly和创建CLR函数的示例代码如下:
-- 创建Assembly
ALTER DATABASE [TEST]
SET TRUSTWORTHY ON
GO

IF EXISTS (SELECT * FROM sys.assemblies asms WHERE asms.name = N'CuteEditor')
DROP ASSEMBLY [CuteEditor]
GO
CREATE ASSEMBLY [CuteEditor]
AUTHORIZATION [dbo]
FROM N'C:/PROGRAM FILES/MICROSOFT SQL SERVER/CUSTOMDLL/CuteEditor.DLL' WITH PERMISSION_SET=EXTERNAL_ACCESS
GO

IF EXISTS (SELECT * FROM sys.assemblies asms WHERE asms.name = N'HTMLAndRTFConverter')
DROP ASSEMBLY [HTMLAndRTFConverter]
GO
CREATE ASSEMBLY [HTMLAndRTFConverter]
AUTHORIZATION [dbo]
FROM N'C:/PROGRAM FILES/MICROSOFT SQL SERVER/CUSTOMDLL/HTMLANDRTFCONVERTER.DLL'WITH PERMISSION_SET=UNSAFE
GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[SCOM_ConvertHTMLToRTFString_UF]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION [dbo].[SCOM_ConvertHTMLToRTFString_UF]
GO

CREATE FUNCTION [dbo].[SCOM_ConvertHTMLToRTFString_UF](@pStrHTML [nvarchar](max))
RETURNS [nvarchar](max) WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [HTMLAndRTFConverter].[XXX.Framework.CLR.HTMLAndRTFConverter].[ConvertHTMLToRTFString]
GO

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[SCOM_ConvertRTFToHTMLString_UF]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION [dbo].[SCOM_ConvertRTFToHTMLString_UF]
GO
CREATE FUNCTION [dbo].[SCOM_ConvertRTFToHTMLString_UF](@pStrRTF [nvarchar](max))
RETURNS [nvarchar](max) WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [HTMLAndRTFConverter].[XXX.Framework.CLR.HTMLAndRTFConverter].[ConvertRTFToHTMLString]
GO
SELECT VALUE_TYPE, [dbo].[SCOM_ConvertHTMLToRTFString_UF](TEST_VALUE) AS RTF FROM TEST WHERE ID =1
/*
VALUE_TYPE RTF
-------------------- -----------------------------------------------------------------------------------------------------------
HTML {/rtf1/ansi/ansicpg1252/deff0/deflang1033{/colortbl;/red0/green0/blue0;..;}...
*/
SELECT VALUE_TYPE, [dbo].[SCOM_ConvertRTFToHTMLString_UF](TEST_VALUE) AS HTML FROM TEST WHERE ID =2
/*
VALUE_TYPE HTML
-------------------- ---------------------------------------------------------------------------------------------------------
RTF <html><body><u>111</u>222<br>333<u>444</u><br>55<u>56</u>66..
*/

到此为止,HTML到RTF的转换完成。下一节将讨论RTF在SSRS 2005中的显示问题。

后台数据库服务器转换。
后台数据库服务器转换主要是将CuteEditor.DLL植入数据库服务器中,作为数据库实例对象,然后创建CLR函数方式实现。示例代码如下:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: