想要做一个RTF转换TXT的代码,找了一圈,好不容易找了个折中的方法,先转HTML,然后提取HTML中的纯文本部分,下面把整个方法介绍一下。
一、第三方开发包
先简单介绍一下RTF格式相关的内容,摘自百度百科:
作为微软公司的标准文件,早期外间需要数十美元向微软付款,才能购买一本薄薄的RTF标准文件。不过随着采用RTF格式标准的软件愈来愈多,RTF格式也愈来愈普遍,微软公司就把标准文件公开,放在网上供开发者下载。现时可供下载的各个RTF版本标准文件如下:
RTF 1.9.1 specification (March 2008)
RTF 1.8 specification (April 2004)
RTF 1.6 specification (May 1999)
RTF 1.5 specification (April 1997)
RTF 1.3 and 1.5 specifications
RTF 1.0 specification (June 1992)
RTF格式是许多软件都能够识别的文件格式。比如Word、WPS Office、Excel等都可以打开RTF格式的文件,这说明这种格式是较为通用的。
RTF是Rich Text Format的缩写,意即多文本格式。这是一种类似DOC格式(Word文档)的文件,有很好的兼容性,使用Windows“附件”中的“写字板”就能打开并进行编辑。使用“写字板”打开一个RTF格式文件时,将看到文件的内容;如果要查看RTF格式文件的源代码,只要使用“记事本”将它打开就行了。这就是说,你完全可以像编辑HTML文件一样,使用“记事本”来编辑RTF格式文件。
忘记怎么找到WebCAT了,可能找太多、太乱,当时的关键词也没记住,http://webcat.sourceforge.net/,JavaDoc可以从这里http://webcat.sourceforge.net/javadocs/访问。WebCAT是葡萄牙里斯本大学的一个XXX什么的开发的(WebCAT was developed at the XLDB group of the Department of Informatics of the Faculty of Sciences of the University of Lisbon in Portugal.),其中提供的RTF2HTML可以很方便地把RTF文件转换成HTML文件,而且速度也还可以。不过只是针对文本,不能保留图片等资源,有些遗憾,但是并不影响转TXT的目的。
二、RTF转HTML
new RTF2HTML().convertRTFToHTML(new File(filename)),方法convertRTFToHTML会返回一个转换成HTML格式的字符串。
三、HTML转TXT
当得到HTML格式文本后,就可以做HTML转TXT了,WebCAT里并不提供HTML转TXT,所以得自己实现。思路是先去除所有的HTML标记,之后将HTML转义字符还原成原始字符即可。对于去除HTML标记,用正则表达式还是比较方便的,另外就是如何还原HTML转义字符,自己写太麻烦而且还有可能无法覆盖所有情况,所以可以去网上找出现成的代码,这里找到的是一个叫做StringUtils的类,其中有一个unescapeHTML(String, int)方法就是用于反转HTML字符,如将“ ”转成空格。
四、查看系统信息
利用StringlistSystemInfo可以查看一些系统信息,具体实现请参考下面代码,对于打印出来的系统信息,有几项内容需要注意一下:
sun.jnu.encoding=Cp1252
file.encoding=UTF-8
file.encoding决定了Java做文件输出时的文件编码,sun.jnu.encoding表示读取文件时采用的什么样的字符编码。
五、开始测试
环境查看
C:/Workspace/php eclipse/Tester/bin>java -Dfile.encoding=UTF-8 -cp "C:/Workspace/eclipse/RTF/Document Parser;" Main -s
-- listing properties --
java.runtime.name=Java(TM) SE Runtime Environment
sun.boot.library.path=C:/Program Files/Java/jre6/bin
java.vm.version=16.3-b01
java.vm.vendor=Sun Microsystems Inc.
java.vendor.url=http://java.sun.com/
path.separator=;
java.vm.name=Java HotSpot(TM) Client VM
file.encoding.pkg=sun.io
user.country=US
sun.java.launcher=SUN_STANDARD
sun.os.patch.level=Service Pack 2
java.vm.specification.name=Java Virtual Machine Specification
user.dir=C:/Documents and Settings/Administrat...
java.runtime.version=1.6.0_20-b02
java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment
java.endorsed.dirs=C:/Program Files/Java/jre6/lib/endorsed
os.arch=x86
java.io.tmpdir=C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/
line.separator=
java.vm.specification.vendor=Sun Microsystems Inc.
user.variant=
os.name=Windows XP
sun.jnu.encoding=Cp1252
java.library.path=C:/WINDOWS/system32;.;C:/WINDOWS/Sun/...
java.specification.name=Java Platform API Specification
java.class.version=50.0
sun.management.compiler=HotSpot Client Compiler
os.version=5.1
user.home=C:/Documents and Settings/Administrator
user.timezone=
java.awt.printerjob=sun.awt.windows.WPrinterJob
file.encoding=UTF-8
java.specification.version=1.6
user.name=KNIGHTRCOM
java.class.path=C:/Documents and Settings/Administrat...
java.vm.specification.version=1.0
sun.arch.data.model=32
java.home=C:/Program Files/Java/jre6
java.specification.vendor=Sun Microsystems Inc.
user.language=en
awt.toolkit=sun.awt.windows.WToolkit
java.vm.info=mixed mode, sharing
java.version=1.6.0_20
java.ext.dirs=C:/Program Files/Java/jre6/lib/ext;C:...
sun.boot.class.path=C:/Program Files/Java/jre6/lib/resour...
java.vendor=Sun Microsystems Inc.
file.separator=/
java.vendor.url.bug=http://java.sun.com/cgi-bin/bugreport...
sun.cpu.endian=little
sun.io.unicode.encoding=UnicodeLittle
sun.desktop=windows
sun.cpu.isalist=pentium_pro+mmx pentium_pro pentium+m...
RTF转TXT。
C:/Workspace/php eclipse/Tester/bin>java -Dfile.encoding=UTF-8 -cp "C:/Workspace/eclipse/RTF/Document Parser;" Main
说明一下参数,-D后面可以让我们主动设置环境变量,所以我们可以设置下Java输出文件时所使用的编码;另外,我们在程序中使用了WebCAT提供的工具类,这些工具类位于解压后的Document Parser文件夹中,所以执行Main类时,需要将文件夹Document Parser放入环境变量中,以便程序可以顺利的找到相关类。
六、关于编码
如果字符编码设置不正确,很大可能会导致乱码现象。这个问题历来都是很棘手的,但是我们在开发过程中可以分析环境以及要读入的文件,然后得出一个正确的解决方案。程序首先是读入RTF然后转换成HTML,这个功能是WebCAT提供的,所以不用关注太多细节问题,但是在调试时发现,转换后的HTML是乱码的!其实这个跟Web开发中request.getParameter得到的结果是乱码的问题有相似之处,都是因为Java没有采用正确的文字编码读取输入字符造成的,在我的开发环境中,由于默认的编码格式是Cp1252(即sun.jnu.encoding的值),所以原本的GB2312就会错误的编码解读导致乱码。这时我们只需要把字符串重新按照正确编码读取一下就OK了。具体步骤是先用Cp1252编码把错误编码的String转成原始的byte,然后再用正确编码GB2312将byte转String还原原始文件的字符内容,代码请参考executeRTF2TXT中的newString(result.getBytes("Cp1252"),"GB2312");这句。
上面描述的是读取文本时产生的乱码现象,另外一个就是写文件的乱码,FileWriter.getEncoding()方法可以获取当前文件是以什么编码保存的,它的值依赖于file.encoding,所以在运行程序时添加一个-D选项设置这个值就可以了,如果有多个环境变量需要指定,可以多用几个-D。
七、源代码
为了删除无用空格,特地在程序中添加了一个StringUtils.trimThroughLines方法用于删除所有行中无效空格,其中正则的具体含义可以参考http://blog.csdn.net/rcom10002/archive/2009/08/19/4462284.aspx。程序的所有源码如下(展开查看):
相关推荐
包括中文字符处理,直接是个工程包,可以直接用, 主要用到的包 *需要引入的包(附件中都在) *poi-3.6-20091214.jar *poi-contrib-3.6-20091214.jar *poi-examples-3.6-20091214.jar *poi-ooxml-3.6-20091214....
4. **AZW3/AZW**:这是Amazon Kindle使用的最新格式,类似于更新版的MOBI,具有更好的布局和图像支持。 5. **FB2**:主要用于俄罗斯市场,FB2是一种基于XML的电子书格式,支持章节、注释和元数据。 6. **DOC/DOCX*...
总的来说,这个压缩包提供了一套基于Java和COM组件的老式解决方案,用于实现Office、txt和RTF文档的在线浏览。虽然当前的技术趋势已经转向了HTML5和Web服务,但理解这种传统方法对于理解过去的技术栈和历史背景仍然...
Aspose.Words不仅支持DOC和DOCX格式,还支持ODT、RTF、HTML等多种文档格式的转换。在Java环境中,通过引入aspose-words-15.8.0.jar这个库文件,我们可以直接在代码中调用其提供的API来实现文档操作。 在"WordToPdf....
电子书格式转换器是一款强大的工具,能够处理多种不同的电子书格式,如UMD、HTML、JAR、PDF、PDB、RTF、HLP、CHM等。这些格式各有其特性和用途,理解它们的特点有助于更好地利用这款转换器。 1. UMD(Universal ...
### PPT、DOC、TXT等转PDF技术解决方案 #### 一、背景介绍 在教育平台中,大量的教学资源以PPT、DOC、TXT等格式存储。为了满足不同用户的需求,并确保资源能够在各种设备上顺利访问,需要将这些文档转换为更普遍...
3、 将 PDF 文件内容导出为任何可支持的格式转换(.docx、.doc、.rtf、.xlsx、.xml、.pptx、.html 或 .txt)。 2、扫描功能: 1、 将继承的扫描 PDF 文件转换为格式化好的、可编辑的 Word 文档; 2、扫描为 Word。...
- **转换文档**:支持将Word文档转换为其他格式,如PDF、HTML、TXT、EPUB等,方便在不同平台和设备上共享和阅读。 - **导出和打印**:能够导出文档为图像格式,或者直接进行打印操作。 2. **API使用**: - **API...
2. **转换能力**:除了核心的Word转PDF功能,还可能支持其他格式的转换,如HTML, ODT, RTF等。 3. **格式保留**:在转换过程中,能够保留原始文档的样式、布局、图像和表格等元素。 4. **编程接口**:提供丰富的Java...
综合以上信息,这个项目提供了一个研究早期Java编程实践的窗口,包括如何使用Java进行网络通信(通过Email)、用户界面设计(HTML和RTF文档)、以及可能的文件存储格式(DeepFrozen)。对于想了解Java历史、早期GUI...
3. **工具使用**:市面上有许多免费和付费的ALLTOTXT转换工具,如Calibre(主要用于电子书管理,但也支持多种格式的转换)、PDFtoText(专门针对PDF文件)、Apache POI(Java库,用于处理Microsoft Office文件),...
- 支持多种文件格式,如DOC、DOCX、ODT、RTF、HTML、PDF、XML、WordprocessingML等。 - 高度精确的文档转换,确保布局和格式的一致性。 - 动态文档生成,允许在运行时插入数据和模板。 - 强大的邮件合并功能,可以...
版本17.2.0提供了一系列先进的功能,使得开发者能够轻松地创建、编辑、转换和打印DOC、DOCX、RTF、HTML、PDF等多种格式的文档。 1. **文档创建与编辑**: Aspose.Words 提供了丰富的API,允许开发者创建空白文档或...
1. **JEditorPane**: JEditorPane是Java Swing库中的一个组件,它可以用来显示和编辑文本、HTML或RTF格式的内容。在这个Web浏览器中,JEditorPane被用来展示网页,因为它能处理基本的HTML标签,提供了一个基本的浏览...
Aspose.Words for Java是Aspose公司开发的一款强大的文档处理组件,主要针对Java开发者设计,用于在Java应用程序中创建、编辑、转换和呈现各种Microsoft Word文档格式。版本18.4是该组件的一个特定更新,提供了对新...
PDF HTML EXCEL FLASH CSV RTF TXT OpenOffice Java2D 等格式。 报表可转换为 JRViewer 3. :JDBC,CVS,Hibernate,JavaBean ,以及用户自定义的数据 支持所有有效的数据源。如 Arrary List 源,如 。4. 5. 6. ...
根据给定的文件信息,“java读取文件”这一主题涵盖了读取多种文件类型的方法,包括但不限于Word、Excel、PDF、TXT、RTF以及HTML文件。以下是对这些知识点的详细解析: ### 1. Java读取Word文件 读取Word文件通常...
7. 与其他格式互转:支持PDF与XML、TXT、图片等格式的转换。 以上就是`java-pdf&word-jar.zip`压缩包中涉及到的Java库的关键功能和应用场景。开发者可以结合这些库,轻松地在Java程序中实现对PDF和Word文档的高效...
这里的“转WORD”可能指的是将其他文本格式(如TXT、HTML、RTF等)转换成Word文档(.doc或.docx)。 2. 自编程序:这意味着这个程序不是来自商业软件开发公司,而是由个人开发者编写的。这通常意味着代码可能没有...