所用到的包的下载:
OpenOffice 下载地址http://www.openoffice.org/
JodConverter 下载地址http://sourceforge.net/projects/jodconverter/files/JODConverter/,也可以直接从附件里面下载
Swftools下载http://www.swftools.org/download.html
源代码下载:http://download.csdn.net/detail/zhangwenlong136/4228945
下面是代码的实现部分:
第一步,将office文档转化为pdf文档,代码如下
1,.先安装好openoffce软件,引入JodConverter里面的包
2执行如下代码
import java.io.File;
importjava.io.IOException;
importjava.net.ConnectException;
importjava.util.Date;
importcom.artofsolving.jodconverter.DocumentConverter;
importcom.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
importcom.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
importcom.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;
/**
*
* @author lvzf
*
*/
public classJOD4DocToPDF extends Thread{
//private static final Log log =LogFactory.getLog(JOD4DocToPDF.class);
private File inputFile;// 需要转换的文件
private File outputFile;// 输出的文件
private Integer id;
public JOD4DocToPDF(String sourceFile,String destFile,Integer id) {
File inputFile = newFile(sourceFile);
if (!inputFile.exists()){
return;//找不到源文件, 则返回-1
}
// 如果目标路径不存在,则新建该路径
File outputFile = newFile(destFile);
if(!outputFile.getParentFile().exists()) {
outputFile.getParentFile().mkdirs();
}
this.inputFile = inputFile;
this.outputFile = outputFile;
this.id=id;
}
public void docToPdf(){
Date start = new Date();
String OpenOffice_HOME = "C:\\Program Files\\OpenOffice.org3";//OpenOffice.org 3的存放路径
if(OpenOffice_HOME.charAt(OpenOffice_HOME.length() - 1) != '\\'){
OpenOffice_HOME +="\\";
}
//要执行的cmd代码
String command = OpenOffice_HOME +"program\\soffice.exe -headless -accept=\"socket," +
"host=127.0.0.1,port=8100;urp;\""+ "-nofirststartwizard";
//连接自己的服务器与端口
OpenOfficeConnection connection = newSocketOpenOfficeConnection("127.0.0.1",8100);
try {
//创建进程调用cmd执行命令
Processpro = Runtime.getRuntime().exec(command);
connection.connect();
DocumentConverter converter = newOpenOfficeDocumentConverter(connection);
converter.convert(inputFile,outputFile);
//关闭进程
pro.destroy();
} catch (ConnectException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if(connection != null) {
connection.disconnect();
connection = null;
}
}
long l = (start.getTime() - newDate().getTime());
long day = l / (24 * 60 * 60 *1000);
long hour = (l / (60 * 60 * 1000) - day* 24);
long min = ((l / (60 * 1000)) - day *24 * 60 - hour * 60);
long s = (l / 1000 - day * 24 * 60 * 60- hour * 60 * 60 - min * 60);
System.out.println("生成" +outputFile.getName() + "耗费:" + min + "分" + s
+ "秒");
//结束转换
//DocService.getInstance().endConverPdfOrder(id);
}
/**
* 由于服务是线程不安全的,所以……需要启动线程
*/
public void run() {
this.docToPdf();
}
public File getInputFile() {
return inputFile;
}
public void setInputFile(File inputFile){
this.inputFile = inputFile;
}
public File getOutputFile() {
return outputFile;
}
public void setOutputFile(File outputFile){
this.outputFile = outputFile;
}
/**
* @param args
*/
public static void main(String[] args){
boolean tend=false;
JOD4DocToPDF tools = newJOD4DocToPDF("F:\\99.doc",
"F:\\88.pdf",3);
tools.start();
}
}
第二部,将pdf文档转化为swf
1.先安装swftools
2.执行如下代码
package com.test;
importjava.io.BufferedReader;
importjava.io.File;
importjava.io.IOException;
importjava.io.InputStreamReader;
/**
*
* @version 1.0
* @author lvzf
*/
public class PdfToSwf{
//finalStringsource=SystemConfig.getInstance().getProperty("PDFTOSWF_PATH");
publicvoid convertPDF2SWF(String fromPath ,String toPath) throws IOException {
Stringcommand = "D:/百度文库软件/swftools/pdf2swf.exe" + " -t " +fromPath + " -o " + toPath + " -s flashversion=9";
System.out.println(command);
Runtime.getRuntime().exec("cmd/c" + command);
}
private int convertPDF2SWF(StringsourcePath, String destPath,
String fileName) throws IOException{
// 目标路径不存在则建立目标路径
File dest = new File(destPath);
if (!dest.exists()) {
dest.mkdirs();
}
// 源文件不存在则返回
File source = newFile(sourcePath);
if (!source.exists()) {
return 0;
}
// 调用pdf2swf命令进行转换
// C:\ProgramFiles\SWFTools>pdf2swf.exe -z -B rfxview.swf -s flashversion=9
// d:/人员管理系
// 统PersonalManagementSystem简介.pdf -od:/test.swf
// 要把D:\\tools\\SWFTools\\放在path里面……不然使用不了播放器
// 先生成flash
String[] envp = new String[1];
envp[0] = "PATH=C:\\Program Files\\SWFTools\\";
//-z -s flashversion=9 -T 9
String command = "pdf2swf\"" + sourcePath
+ "\" -o\"" + destPath + fileName + "\"";
//Process pro =Runtime.getRuntime().exec(command, envp);
//Process pro =Runtime.getRuntime().exec("cmd /c d:\\score.txt");
Process pro =Runtime.getRuntime().exec("/"+source+" d:\\displaytag.pdf -o d:\\displaytag.swf");
// System.out.println(command);
BufferedReader bufferedReader = newBufferedReader(
newInputStreamReader(pro.getInputStream()));
while (bufferedReader.readLine() !=null) {
String text =bufferedReader.readLine();
System.out.println(text);
}
try {
pro.waitFor();
} catch (InterruptedException e) {
// TODO Auto-generated catchblock
e.printStackTrace();
}
// 然后在套播放器
/*
* swfcombine -z -X 720 -Y 540"D:\tools\SWFTools\swfs\rfxview.swf"
* viewport="d:/人
*员管理系统PersonalManagementSystem简介.swf" -o"d:/人员管理系统PersonalManagemen
* tSystem简介.swf"
*/
// command = "swfcombine -z -X 720 -Y540 \"C:/Program Files/SWFTools/swfs/rfxview.swf\"viewport=\""
// + destPath + fileName +"\" -o \"" + destPath + fileName +"\"";
// pro =Runtime.getRuntime().exec(command, envp);
// System.out.println(command);
// bufferedReader = new BufferedReader(newInputStreamReader(pro
// .getInputStream()));
// while (bufferedReader.readLine() !=null) {
// String text =bufferedReader.readLine();
// System.out.println(text);
// }
// try {
// pro.waitFor();
// } catch (InterruptedException e) {
// // TODO Auto-generated catchblock
// e.printStackTrace();
// }
return pro.exitValue();
}
public static void main(String[] args){
try {
// int r=newtest().convertPDF2SWF(sourcePath,
// destPath, fileName);
// System.out.println(r);
newPdfToSwf().convertPDF2SWF("F:\\在线文档库.pdf","F:\\0000.swf");
} catch (IOException e) {
// TODO Auto-generated catchblock
e.printStackTrace();
}
}
}
第三步,在页面中导入flexpaper
具体代码如下
<%@ pagelanguage="java" pageEncoding="UTF-8"%>
if(window.addEventListener)
window.addEventListener('DOMMouseScroll',handleWheel, false);
window.onmousewheel= document.onmousewheel = handleWheel;
if(window.attachEvent)
window.attachEvent("onmousewheel",handleWheel);
functionhandleWheel(event){
try{
if(!window.document.FlexPaperViewer.hasFocus()){returntrue;}
window.document.FlexPaperViewer.setViewerFocus(true);
window.document.FlexPaperViewer
var swfVersionStr ="9.0.124";
var status="1";
//alert(status);
if(status=="1"){
var xiSwfUrlStr ="playerProductInstall.swf";
var flashvars = {
SwfFile :escape("0000.swf"),
Scale : 0.6,
ZoomTransition : "easeOut",
ZoomTime : 0.5,
ZoomInterval : 0.1,
FitPageOnLoad : false,
FitWidthOnLoad : true,
PrintEnabled : true,
FullScreenAsMaxWindow : true,
ProgressiveLoading : true,
localeChain: "en_US"
};
var params = {
}
params.quality = "high";
params.bgcolor ="#ffffff";
params.allowscriptaccess ="sameDomain";
params.allowfullscreen ="true";
var attributes = {};
attributes.id ="FlexPaperViewer";
attributes.name ="FlexPaperViewer";
swfobject.embedSWF(
"FlexPaperViewer.swf", "flashContent",
"600","500",
swfVersionStr, xiSwfUrlStr,
flashvars, params, attributes);
swfobject.createCSS("#flashContent","display:block;text-align:center;");
}
PS: 在进程中soffice.exe不能关闭 选用如下的方式进行关闭
1.cmd下运行 taskkill /?查看关闭.exe的方法
/S system 指定要连接的远程系统。
/U [domain\]user 指定应该在哪个用户上下文执行这个命令。
/P [password] 为提供的用户上下文指定密码。如果忽略,提示输入
/FI filter 应用筛选器以选择一组任务。
允许使用"*"。例如,映像名称 eq acme*
/PID processid 指定要终止的进程的 PID。
使用 TaskList 取得 PID。
/IM imagename 指定要终止的进程的映像名称。通配符'*'可用来
指定所有任务或映像名称。
/T 终止指定的进程和由它启用的子进程。
/F 指定强制终止进程。
/? 显示帮助消息。
2.选择运行 taskkill /F /IMsoffice.exe /T 出现下述结果
成功: 已终止 PID 13500 (属于PID 12412 子进程)的进程。
成功: 已终止 PID 12412 (属于PID 4836 子进程)的进程。