仿豆丁百度文库网页版阅读器完整解决方案,linux windows
2011-07-12 18:12
357 查看
最近实现了双平台下仿豆丁网百度文库阅读doc等文档的例子,分享给大家,也留做自己以后查找
先发张效果图
Java平台要实现类似豆丁百度文科的文档在线阅读,总体思路是讲doc docx等文件格式利用openoffice转换成pdf再用swftools转为swf。再用flexpaper组件显示swf。
此过程涉及软件(实测)
openoffice3.2(window)
swftools-2011-01-23-1815.exe(window)
openoffice3.1.1(linux)
swftools-2011-01-23-1815.tar.gz(linux)
jar包jodconverter-2.2.2(里面lib目录下含多个要用到的jar文件)
flexpaper1.4.0 (直接复制过来,项目上运行成功,本地运行还没成功)
FlexPaper_1.4.5_flash(网上下载的最新版本没试过,二选一即可)
附上自己写的java转换Demo DocConverter.java
importjava.io.BufferedInputStream;
importjava.io.File;
importjava.io.IOException;
importjava.io.InputStream;
importcom.artofsolving.jodconverter.DocumentConverter;
importcom.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
importcom.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;
/**
* doc docx格式转换
* @author Administrator
*
*/
public classDocConverter {
private static final int environment = 1;//环境 1:windows2:linux (只涉及pdf2swf路径问题)
privateString fileString;
privateString outputPath = "";//输入路径 ,如果不设置就输出在默认的位置
privateString fileName;
private FilepdfFile;
private FileswfFile;
private FiledocFile;
publicDocConverter(String fileString) {
ini(fileString);
}
/**
* 重新设置file
* @param fileString
*/
public voidsetFile(String fileString){
ini(fileString);
}
/**
* 初始化
* @param fileString
*/
private voidini(String fileString) {
this.fileString =fileString;
fileName =fileString.substring(0, fileString.lastIndexOf("."));
docFile = newFile(fileString);
pdfFile = newFile(fileName + ".pdf");
swfFile = newFile(fileName + ".swf");
}
/**
* 转为PDF
* @param file
*/
private voiddoc2pdf() throws Exception{
if(docFile.exists()){
if(!pdfFile.exists()){
OpenOfficeConnection connection = newSocketOpenOfficeConnection(8100);
try {
connection.connect();
DocumentConverter converter = newOpenOfficeDocumentConverter(connection);
converter.convert(docFile, pdfFile);
// close theconnection
connection.disconnect();
System.out.println("****pdf转换成功,PDF输出:" + pdfFile.getPath()+ "****");
} catch(java.net.ConnectException e) {
// TODOAuto-generated catch block
e.printStackTrace();
System.out.println("****swf转换器异常,openoffice服务未启动!****");
throw e;
} catch(com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException e) {
e.printStackTrace();
System.out.println("****swf转换器异常,读取转换文件失败****");
throw e;
} catch(Exception e){
e.printStackTrace();
throw e;
}
} else {
System.out.println("****已经转换为pdf,不需要再进行转化****");
}
} else {
System.out.println("****swf转换器异常,需要转换的文档不存在,无法转换****");
}
}
/**
* 转换成 swf
*/
private voidpdf2swf() throws Exception{
Runtime r = Runtime.getRuntime();
if(!swfFile.exists()){
if(pdfFile.exists()){
if(environment ==1){//windows环境处理
try {
Process p = r.exec("D:/TOOLS/SWFTools/pdf2swf.exe" +
pdfFile.getPath()+ " -o " + swfFile.getPath()+ " -T 9");
System.out.print(loadStream(p.getInputStream()));
System.err.print(loadStream(p.getErrorStream()));
System.out.print(loadStream(p.getInputStream()));
System.err.println("****swf转换成功,文件输出:" + swfFile.getPath()+ "****");
if(pdfFile.exists()){
pdfFile.delete();
}
} catch(IOException e) {
e.printStackTrace();
throw e;
}
} else if(environment ==2){//linux环境处理
try {
Process p = r.exec("pdf2swf" +
pdfFile.getPath()+ " -o " + swfFile.getPath()+ " -T 9");
System.out.print(loadStream(p.getInputStream()));
System.err.print(loadStream(p.getErrorStream()));
System.err.println("****swf转换成功,文件输出:" + swfFile.getPath()+ "****");
if(pdfFile.exists()){
pdfFile.delete();
}
} catch(Exception e) {
e.printStackTrace();
throw e;
}
}
} else {
System.out.println("****pdf不存在,无法转换****");
}
} else {
System.out.println("****swf已经存在不需要转换****");
}
}
staticString loadStream(InputStream in) throwsIOException {
int ptr= 0;
in = newBufferedInputStream(in);
StringBuffer buffer = newStringBuffer();
while((ptr = in.read()) != -1 ) {
buffer.append((char)ptr);
}
returnbuffer.toString();
}
/**
* 转换主方法
*/
public booleanconver() {
if(swfFile.exists()){
System.out.println("****swf转换器开始工作,该文件已经转换为swf****");
return true;
}
if(environment ==1){
System.out.println("****swf转换器开始工作,当前设置运行环境windows****");
} else {
System.out.println("****swf转换器开始工作,当前设置运行环境linux****");
}
try {
doc2pdf();
pdf2swf();
} catch(Exception e) {
// TODOAuto-generated catch block
e.printStackTrace();
return false;
}
if (swfFile.exists()){
return true;
} else {
return false;
}
}
/**
* 返回文件路径
* @param s
*/
publicString getswfPath(){
if(swfFile.exists()){
String tempString = swfFile.getPath();
tempString = tempString.replaceAll("\\\\", "/");
returntempString;
} else {
return "";
}
}
/**
* 设置输出路径
*/
public voidsetOutputPath(String outputPath){
this.outputPath =outputPath;
if(!outputPath.equals("")){
String realName = fileName.substring(fileName.lastIndexOf("/"), fileName.lastIndexOf("."));
if(outputPath.charAt(outputPath.length())== '/'){
swfFile = newFile(outputPath + realName + ".swf");
} else {
swfFile = newFile(outputPath + realName + ".swf");
}
}
}
public static voidmain(String s[]) {
DocConverter d = newDocConverter("D:/data/FTP/midlongforecast/midweatherforecast/20010202.xml");
d.conver();
}
}
-------------------------------------------------------------------------------------------------------------------------------------------------------
以上即是所有用到的转换需要用到的文件
windows安装过程省略,linux下安装swftools命令
解压到目录后
./configure
make
make install
无论在哪个平台安装完以上两个软件后
需要在将openoffice以服务方式启动
Window 启动方式
cd C:\ProgramFiles\OpenOffice.org 3\program
soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;"–nofirststartwizard
Linux启动
soffice-headless -accept="socket,host=127.0.0.1,port=8100;urp;"-nofirststartwizard &
以上是实现两个平台下的转换,但是会有openoffice解析不了的字体乱码问题,或者显示字体变形等
更高级的web文档应用可以参考QQ邮件,邮件实现了在线预览excel doc pdf等格式文件并可以用鼠标点击选取复制,期待高手解决.
先发张效果图
Java平台要实现类似豆丁百度文科的文档在线阅读,总体思路是讲doc docx等文件格式利用openoffice转换成pdf再用swftools转为swf。再用flexpaper组件显示swf。
此过程涉及软件(实测)
openoffice3.2(window)
swftools-2011-01-23-1815.exe(window)
openoffice3.1.1(linux)
swftools-2011-01-23-1815.tar.gz(linux)
jar包jodconverter-2.2.2(里面lib目录下含多个要用到的jar文件)
flexpaper1.4.0 (直接复制过来,项目上运行成功,本地运行还没成功)
FlexPaper_1.4.5_flash(网上下载的最新版本没试过,二选一即可)
附上自己写的java转换Demo DocConverter.java
importjava.io.BufferedInputStream;
importjava.io.File;
importjava.io.IOException;
importjava.io.InputStream;
importcom.artofsolving.jodconverter.DocumentConverter;
importcom.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
importcom.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;
/**
* doc docx格式转换
* @author Administrator
*
*/
public classDocConverter {
private static final int environment = 1;//环境 1:windows2:linux (只涉及pdf2swf路径问题)
privateString fileString;
privateString outputPath = "";//输入路径 ,如果不设置就输出在默认的位置
privateString fileName;
private FilepdfFile;
private FileswfFile;
private FiledocFile;
publicDocConverter(String fileString) {
ini(fileString);
}
/**
* 重新设置file
* @param fileString
*/
public voidsetFile(String fileString){
ini(fileString);
}
/**
* 初始化
* @param fileString
*/
private voidini(String fileString) {
this.fileString =fileString;
fileName =fileString.substring(0, fileString.lastIndexOf("."));
docFile = newFile(fileString);
pdfFile = newFile(fileName + ".pdf");
swfFile = newFile(fileName + ".swf");
}
/**
* 转为PDF
* @param file
*/
private voiddoc2pdf() throws Exception{
if(docFile.exists()){
if(!pdfFile.exists()){
OpenOfficeConnection connection = newSocketOpenOfficeConnection(8100);
try {
connection.connect();
DocumentConverter converter = newOpenOfficeDocumentConverter(connection);
converter.convert(docFile, pdfFile);
// close theconnection
connection.disconnect();
System.out.println("****pdf转换成功,PDF输出:" + pdfFile.getPath()+ "****");
} catch(java.net.ConnectException e) {
// TODOAuto-generated catch block
e.printStackTrace();
System.out.println("****swf转换器异常,openoffice服务未启动!****");
throw e;
} catch(com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException e) {
e.printStackTrace();
System.out.println("****swf转换器异常,读取转换文件失败****");
throw e;
} catch(Exception e){
e.printStackTrace();
throw e;
}
} else {
System.out.println("****已经转换为pdf,不需要再进行转化****");
}
} else {
System.out.println("****swf转换器异常,需要转换的文档不存在,无法转换****");
}
}
/**
* 转换成 swf
*/
private voidpdf2swf() throws Exception{
Runtime r = Runtime.getRuntime();
if(!swfFile.exists()){
if(pdfFile.exists()){
if(environment ==1){//windows环境处理
try {
Process p = r.exec("D:/TOOLS/SWFTools/pdf2swf.exe" +
pdfFile.getPath()+ " -o " + swfFile.getPath()+ " -T 9");
System.out.print(loadStream(p.getInputStream()));
System.err.print(loadStream(p.getErrorStream()));
System.out.print(loadStream(p.getInputStream()));
System.err.println("****swf转换成功,文件输出:" + swfFile.getPath()+ "****");
if(pdfFile.exists()){
pdfFile.delete();
}
} catch(IOException e) {
e.printStackTrace();
throw e;
}
} else if(environment ==2){//linux环境处理
try {
Process p = r.exec("pdf2swf" +
pdfFile.getPath()+ " -o " + swfFile.getPath()+ " -T 9");
System.out.print(loadStream(p.getInputStream()));
System.err.print(loadStream(p.getErrorStream()));
System.err.println("****swf转换成功,文件输出:" + swfFile.getPath()+ "****");
if(pdfFile.exists()){
pdfFile.delete();
}
} catch(Exception e) {
e.printStackTrace();
throw e;
}
}
} else {
System.out.println("****pdf不存在,无法转换****");
}
} else {
System.out.println("****swf已经存在不需要转换****");
}
}
staticString loadStream(InputStream in) throwsIOException {
int ptr= 0;
in = newBufferedInputStream(in);
StringBuffer buffer = newStringBuffer();
while((ptr = in.read()) != -1 ) {
buffer.append((char)ptr);
}
returnbuffer.toString();
}
/**
* 转换主方法
*/
public booleanconver() {
if(swfFile.exists()){
System.out.println("****swf转换器开始工作,该文件已经转换为swf****");
return true;
}
if(environment ==1){
System.out.println("****swf转换器开始工作,当前设置运行环境windows****");
} else {
System.out.println("****swf转换器开始工作,当前设置运行环境linux****");
}
try {
doc2pdf();
pdf2swf();
} catch(Exception e) {
// TODOAuto-generated catch block
e.printStackTrace();
return false;
}
if (swfFile.exists()){
return true;
} else {
return false;
}
}
/**
* 返回文件路径
* @param s
*/
publicString getswfPath(){
if(swfFile.exists()){
String tempString = swfFile.getPath();
tempString = tempString.replaceAll("\\\\", "/");
returntempString;
} else {
return "";
}
}
/**
* 设置输出路径
*/
public voidsetOutputPath(String outputPath){
this.outputPath =outputPath;
if(!outputPath.equals("")){
String realName = fileName.substring(fileName.lastIndexOf("/"), fileName.lastIndexOf("."));
if(outputPath.charAt(outputPath.length())== '/'){
swfFile = newFile(outputPath + realName + ".swf");
} else {
swfFile = newFile(outputPath + realName + ".swf");
}
}
}
public static voidmain(String s[]) {
DocConverter d = newDocConverter("D:/data/FTP/midlongforecast/midweatherforecast/20010202.xml");
d.conver();
}
}
-------------------------------------------------------------------------------------------------------------------------------------------------------
以上即是所有用到的转换需要用到的文件
windows安装过程省略,linux下安装swftools命令
解压到目录后
./configure
make
make install
无论在哪个平台安装完以上两个软件后
需要在将openoffice以服务方式启动
Window 启动方式
cd C:\ProgramFiles\OpenOffice.org 3\program
soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;"–nofirststartwizard
Linux启动
soffice-headless -accept="socket,host=127.0.0.1,port=8100;urp;"-nofirststartwizard &
以上是实现两个平台下的转换,但是会有openoffice解析不了的字体乱码问题,或者显示字体变形等
更高级的web文档应用可以参考QQ邮件,邮件实现了在线预览excel doc pdf等格式文件并可以用鼠标点击选取复制,期待高手解决.
相关文章推荐
- 仿豆丁百度文库网页版阅读器完整解决方案,linux windows
- 双系统Linux无法挂载Windows分区解决方案
- Linux与Windows编码不一致的解决方案
- MySQL 5 on Linux手动安装方法与中文解决方案完整攻略
- linux主机无法连接Windows上的MySql服务器解决方案
- 红帽推出业界最完整的Linux容器解决方案
- 关于linux和windows双系统时间不同步的解决方案
- PHP 获取内网用户MAC地址(WINDOWS/linux)解决方案
- PHP 获取内网用户MAC地址(WINDOWS/linux)解决方案
- AES加密解密Windows下跟linux下结果不同的解决方案
- Windows和Linux下枚举(遍历)当前文件夹下所有文件完整路径的命令行
- ssh如何通过跳板机直接访问到后端服务器(Mac&Linux&Windows解决方案)
- windows下TF完整安装流程及出错解决方案
- linux实验_添加内核模块-完整版本_百度文库
- linux与windows共存的解决方案
- 在windows下压缩的文件,在linux下解压会乱码的解决方案
- MYSQL:Access denied for user 'root'@'localhost' 解决方案(Windows,Linux,MacOS三个系统各自的解决方案)
- Linux学习笔记(二):关于windows,linux双系统删除grub后不能进入系统解决方案
- windows下建立文件的换行符^M导致linux下的shell脚本运行错误的解决方案
- windows的程序大小写linux下不兼容解决方案(转载)