java程序REF文件转DOC文件

本来是想将REF文件直接转换成html文件,但是由于乱码的问题没办法解决,所以选择了一个折中的办法,先将RTF转换成DOC的文档,再利用HWPFDocument类将DOC文件转换为html文件

1、下载OpenOffice安装在需要进行文书转换的电脑上,下载地址:http://rj.baidu.com/soft/detail/15989.html?ald

2、在对应程序中添加jar包,对应下载jar包百度云盘地址: 获取码:

或者说直接在网上搜索jodconverter-core-3.0-beta-4,下载下来,里面有对应的包

3、写java类,运行项目进行调试转换

package com.thunisoft.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.artofsolving.jodconverter.OfficeDocumentConverter;
import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;
import org.artofsolving.jodconverter.office.OfficeManager;

public class TestRTF2Word {
private static String OFFICE_HOME = "C:\\Program Files (x86)\\OpenOffice 4"; // "/opt/libreoffice5.0";
// private static int port[] = { 8100 };
private static int port = 8100;
private static OfficeManager officeManager;

// 打开服务器
public static void startService() {
DefaultOfficeManagerConfiguration configuration = new DefaultOfficeManagerConfiguration();
try {
System.out.println("准备启动openoffice服务....");
configuration.setOfficeHome(OFFICE_HOME);// 设置OpenOffice.org安装目录
configuration.setPortNumbers(port);
configuration.setTaskExecutionTimeout(1000 * 60 * 5L);// 设置任务执行超时为5分钟
configuration.setTaskQueueTimeout(1000 * 60 * 60 * 24L);// 设置任务队列超时为24小时
officeManager = configuration.buildOfficeManager();
officeManager.start(); // 启动服务
System.out.println("office转换服务启动成功!");
} catch (Exception ce) {
System.out.println("office转换服务启动失败!详细信息:" + ce);
System.exit(0);
}
}

// 关闭服务器
public static void stopService() {
System.out.println("关闭office转换服务....");
if (officeManager != null) {
officeManager.stop();
}
System.out.println("关闭office转换成功!");
}

public static void main(String[] args) {
startService();
OfficeDocumentConverter converter = new OfficeDocumentConverter(
officeManager);
try {
File outFile = new File("E:\\rtf\\1\\qwe123.doc");
if (!outFile.getParentFile().exists()) {
outFile.getParentFile().mkdirs();
}
System.out.println(outFile.exists());
File inFile = new File("E:\\rtf\\1\\3606c3de7612-ffa5-44cd-bbc1-f5312de0aa3d.rtf");
System.out.println(inFile.exists());

converter.convert(inFile, outFile);
} catch (Exception e) {
e.printStackTrace();
} finally {
stopService();
}
}

}

4、转换完成后可以将其存放到某个目录下,通过以下方式转换为html文件

private static ByteArrayOutputStream docHandler(String fileName) {
InputStream is = new FileInputStream(fileName);
HWPFDocument wordDocument = null;
wordDocument = new HWPFDocument(is);
WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(DocumentBuilderFactory
.newInstance().newDocumentBuilder().newDocument());
// wordToHtmlConverter.setPicturesManager(new PicturesManager() {
// public String savePicture(byte[] content, PictureType pictureType,
// String suggestedName, float widthInches, float heightInches) {
// return "pic/" + suggestedName;
// }
// });
wordToHtmlConverter.processDocument(wordDocument);
// save pictures
List<Picture> pics = wordDocument.getPicturesTable().getAllPictures();
if (pics != null) {
for (int i = 0; i < pics.size(); i++) {
Picture pic = (Picture) pics.get(i);
try {
pic.writeImageContent(new FileOutputStream(URLDecoder.decode(getPicPath(),"UTF-8")
+ pic.suggestFullFileName()));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}

Document htmlDocument = wordToHtmlConverter.getDocument();
ByteArrayOutputStream out = new ByteArrayOutputStream();
DOMSource domSource = new DOMSource(htmlDocument);
StreamResult streamResult = new StreamResult(out);

TransformerFactory tf = TransformerFactory.newInstance();
Transformer serializer = tf.newTransformer();
serializer.setOutputProperty(OutputKeys.ENCODING, "GB2312");
// serializer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
serializer.setOutputProperty(OutputKeys.INDENT, "yes");
serializer.setOutputProperty(OutputKeys.METHOD, "html");
serializer.transform(domSource, streamResult);
out.close();
return out;
}

时间: 2024-12-12 20:42:11

java程序REF文件转DOC文件的相关文章

分享非常有用的Java程序 (关键代码) (二)---列出文件和目录

原文:分享非常有用的Java程序 (关键代码) (二)---列出文件和目录 File dir = new File("directoryName"); String[] children = dir.list(); if (children == null) { // Either dir does not exist or is not a directory } else { for (int i=0; i < children.length; i++) { // Get f

用java程序把本地的一个文件拷贝到hdfs上并显示进度

把程序打成jar包放到Linux上 转到目录下执行命令 hadoop jar mapreducer.jar /home/clq/export/java/count.jar  hdfs://ubuntu:9000/out06/count/ 上面一个是本地文件,一个是上传hdfs位置 成功后出现:打印出来,你所要打印的字符. package com.clq.hdfs; import java.io.BufferedInputStream; import java.io.FileInputStream

【Java】windows下直接运行Java程序(利用bat运行jar文件)

这种方法只是掩耳盗铃,简化了运行jar的方式.并不是将Java代码打包成了exe文件. 具体步骤为,电脑上有JRE环境,然后利用bat文件包装一下运行jar的控制台语句,最后用C语言打包成exe文件. jar包有两种运行方式,一种为直接双击,直接双击需要配置注册表和环境变量才能运行jar包. 还有一种是在控制台运行,输入javaw -jar xxxx.所有的操作都需要Java环境. bat文件 bat是Windows下可以直接运行的批处理文件,编写也很简单. 新建一个txt文件,输入下面两行脚本

Java程序如何生成Jar 执行文件

一.用Eclipse生产Jar文件 首先,看一下我的项目的目录结构: 1,项目名字上面点右键,选择Export,在选择java\JAR file,下一步:如下图: (2),选择,src文件夹,.classpath和.project可以去掉不选.Select the export distination(选择输出路径),下一步. (3),去掉Export class files withcompile errors(编译错误时也输出class文件)的选项,单击下一步. (4),在main clas

java程序压缩和解压zip文件

需要了解的知识汇总:DeflaterOutputStream :压缩类的基类.ZipOutputStream :DeflaterOutputStream的一个子类,把数据压缩成Zip文件格式GZIPOutputStream :DeflaterOutputStream的一个子类,把数据压缩成GZip文件格式 InflaterInputStream :解压缩类的基类ZipInputStream :InflaterInputStream的一个子类,能解压缩Zip格式的数据GZIPInputStream

Java文件操作①——XML文件的读取

一.邂逅XML 文件种类是丰富多彩的,XML作为众多文件类型的一种,经常被用于数据存储和传输.所以XML在现今应用程序中是非常流行的.本文主要讲Java解析和生成XML.用于不同平台.不同设备间的数据共享通信. XML文件的表现:以“.xml”为文件扩展名的文件: 存储结构:树形结构: 节点名称区分大小写. 1.<book id="1"></book> id为属性, <book><id>1</id></book>

2.1 简单的Java程序

2.1.1 Java程序的类型 Application程序 Applet程序 结构和运行环境不同. 前者是独立的程序,需要执行器(调用虚拟机)来运行. 后者是嵌在HTML网页中的非独立的程序. 由专门的appletViewer来运行. 或者由Web 浏览器(调用JAVA虚拟机)来运行. Application程序 public class Hello { public static void main(String[] args) { System.out.println("Hello Worl

二、第一个JAVA程序——HelloWorld

1.Java程序的运行机制. Java源文件的后缀名为java 形如 *.java,通过编译器编译后生成*.class文件,由计算机来运行class文件执行java程序.但是,此时所指的计算机并不是物理上的计算机而是java的虚拟机,即JVM. Java中所有的程序都是运行在JVM上的,即所有的*.class文件在JVM上运行而对于*.class文件来说只需要符合JVM的规范就可以了,而不需要考虑对硬件或者其他操作系统的兼容性.再由JVM去适应各个操作系统,因此,有了java的一句口号一次编译,

在ORACLE触发器里调用JAVA程序

因为项目需要,有一个已经写好的Java程序,想要在Oracle某个表的触发器中调用,以使得每次数据更新时,调用这个JAVA程序,来修改后台某个数据. 现将过程记录如下: 1.编写JAVA程序 [java] view plain copy public class Main { public static void modify(String statTime) { String datas = "/var/spool/cron/oracle"; File data = new File