html rtf转换,RTF-to-HTML Converter

Environment: VC++, RichEdit V.1

Note: DoxyGen compatible Dokumentation, Warning Level 2

Portions (Tree Template) From Alexander Kovachev's Tree Class.

To edit formatted text, Windows provides a RichEdit control (RICHED32.DLL, respectively RICHED20.DLL), which is encapsulated in MFC using the RichEditCtrl class. It is stored in the RichEdit (RTF) format; WordPad and MS Word are examples of applications that use RTF files. But today's world is speaking HTML, so I looked for a possibility to convert RTF data to HTML data. I haven't found any free example yet, so I decided to write my own class as an Exporter. Here it is.

The source zip file contains the needed classes and file:

RTF2HTMLConverter.h/cpp, which is the main converter class CRTF_HTMLConverter

RTF2HTMLTree.h/cpp, which contains Alexander Kovachev's template tree class

Util.h/cpp, some very simple helper routines

RTF2HTML.h/cpp, a console-based converter demo app

The converter class itself does no reading or writing from/to files or RichEdit controls; this has to be done outside. (For example, to learn how to stream the complete RTF content from/into a RichEdit controls, just look here in the same section.) The class is derived only from CObject, and works with CString >>/<< streaming functions. When streaming in, the data is converted.

Note: Only the RTF->HTML direction is supported at the moment. There is also a very small subset of possible RTF supported, at this time.

Bold, Italic, Underline

Font Size, Color, and Face

Paragraph alignment

Special characters, such as encoded German Umlauts

I hope the class is easy to extend (for new tags, mostly ::R2H_InterpretTag has to be modified) and any suggestions or extensions are very welcome; I'll post them here. But please don't give me "My RTF file isn't correctly exported" comments; I mentioned it is only a demo and only a few tags are currently supported. I've made my RTF file using the WordPad editor shipped with Windows; MS Word builds a more complex RTF structure. For complete RTF documentation, see MSDN ("RTF Specification").

An RTF file stores text data in a structured way, together with formatting tags (slightly similar to HTML). Let's have the following example:

--

TESTBIGSMALL AGAINBROWNBLUEANDANOTHER fONT.

This is a left-aligned paragraph

right-aligned one

centered one

--

It is represented in RTF as the following:

{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fswiss\

fcharset0 Arial;}{\f1\fmodern\fprq1\fcharset0 Courier New;}

{\f2\fswiss\fprq2\fcharset0 Arial;}

{\f3\fnil\fcharset2 Symbol;}}

{\colortbl ;\red128\green0\blue0;\red0\green0\blue255;}

\viewkind4\uc1\pard\f0\fs24 TEST \fs40 BIG \fs24 SMALL AGAIN\b

\cf1 BROWN \cf2 BLUE \cf0\b0 AND \f1 ANOTHER fONT.\par

\par

\par

\f2 This is a left-aligned paragraph\par

\pard\qr right-aligned one\par

\pard\qc centered one\par

}

ConvertRTF2HTML is the main converting procedure. It performs the following steps:

R2H_BuildTree

As you see, RTF has a nested structure, where each section is in braces {}. So, our first step is to build a tree structure :

+RTF1

+COLORTBL

+FONTTBL

+F0

+F1

+F2

+F3

Here, I've just noted the section's first attribute (section name). Each section then contains more code; both plain text (RTF1 is the main section with the main text) and attributes.

R2H_SetMetaData

Sub-Items such as colortbl and fonttbl are helper tables and in the main text's RTF tags there are references to it, so these global attributes have to be scanned and stored.

R2H_CreateHTMLElements

Loop thru RTF1 main text and add HTML elements. HTML elements could be either:Plain Text—Is added like it is

RTF tags starting with a \. These have to be converted to the correspondig HTML tags with R2H_InterpretTag. Sometimes, there must be look-ups in global tables (e.g. color or font table), or previously inserted elements must be scanned or modified.

R2H_GetHTMLHeader—Write HTML header in target HTML

R2H_GetHTMLElements—Dump added HTML elements in target HTML

R2H_GetHTMLFooter—Write HTML footer in target HTML

Ready!

Downloads

Download source and demo project - 15 Kb

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用第三方库jsrtf来实现将HTML转换RTF格式。具体步骤如下: 1. 引入jsrtf库 ```html <script src="jsrtf.js"></script> ``` 2. 创建一个HTML元素,用于输入HTML内容 ```html <div id="html-content"> <h1>Hello World!</h1> <p>This is a sample HTML content.</p> </div> ``` 3. 使用jsrtf库将HTML内容转换RTF格式 ```javascript var htmlContent = document.getElementById("html-content").innerHTML; var rtfContent = jsrtf.parse(htmlContent).toRTF(); ``` 4. 将生成的RTF内容下载到本地 ```javascript var downloadLink = document.createElement("a"); downloadLink.href = "data:text/rtf;charset=utf-8," + encodeURIComponent(rtfContent); downloadLink.download = "converted.rtf"; document.body.appendChild(downloadLink); downloadLink.click(); document.body.removeChild(downloadLink); ``` 完整的代码示例: ```html <!DOCTYPE html> <html> <head> <title>HTML to RTF Converter</title> <script src="jsrtf.js"></script> </head> <body> <div id="html-content"> <h1>Hello World!</h1> <p>This is a sample HTML content.</p> </div> <button onclick="convertToRtf()">Convert to RTF</button> <script> function convertToRtf() { var htmlContent = document.getElementById("html-content").innerHTML; var rtfContent = jsrtf.parse(htmlContent).toRTF(); var downloadLink = document.createElement("a"); downloadLink.href = "data:text/rtf;charset=utf-8," + encodeURIComponent(rtfContent); downloadLink.download = "converted.rtf"; document.body.appendChild(downloadLink); downloadLink.click(); document.body.removeChild(downloadLink); } </script> </body> </html> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值