作者:
焱龙
出处:
http://star-studio.cnblogs.com/
申明:作者写博是为了总结经验,和以后的工作参考之用。
如需转载,请尽量保留此申明,并在文章页面明显位置给出原文连接。谢谢!
第五步,office文档转为pdf,同时进一步转为swf
???? 网上资料有很多office文档转为pdf,pdf转为swf,但都是单步转换。关于一起转换的资料比较少。
一起转换有个问题就是转为pdf时,这个转换过程将花费一段时间才能成功,如何控制在pdf转换成功后,才进行swf的转换。
以及多个文档批量转换又该怎么办。
?
???? 有幸笔者还是找到了一篇同时转换的代码:
新建DocConverter.java

package com.iori.webapp.util;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import com.artofsolving.jodconverter.DocumentConverter;
import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;
/*
* doc docx格式转换
* @author Administrator
*/
public class DocConverter {
private static final int environment=1;//环境1:windows 2:linux(涉及pdf2swf路径问题)
private String fileString;
private String outputPath="";输入路径,如果不设置就输出在默认位置private String fileName;
private File pdfFile;
private File swfFile;
private File docFile;
public DocConverter(String fileString)
{
ini(fileString);
}
* 重新设置 file
* @param fileString
*/
void setFile(String fileString)
{
ini(fileString);
}
* 初始化
* @param fileString
void ini(String fileString)
{
this.fileString=fileString;
fileName=fileString.substring(0,fileString.lastIndexOf("."));
docFile=new File(fileString);
pdfFile=new File(fileName+".pdf");
swfFile=new File(fileName+".swf");
}
* 转为PDF
* @param file
void doc2pdf() throws Exception
{
if(docFile.exists())
{
if(!pdfFile.exists())
{
OpenOfficeConnection connection=new SocketOpenOfficeConnection(8100);
try
{
connection.connect();
DocumentConverter converter=new OpenOfficeDocumentConverter(connection);
converter.convert(docFile,pdfFile);
close the connection
connection.disconnect();
System.out.println("****pdf转换成功,PDF输出:"+pdfFile.getPath()+"****");
}
catch(java.net.ConnectException e)
{
ToDo Auto-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转换器异常,读取转换文件失败****");
catch(Exception e)
{
e.printStackTrace();
throw e;
}
}
else
{
System.out.println("****已经转换为pdf,不需要再进行转化****");
}
}
else
{
System.out.println("****swf转换器异常,需要转换的文档不存在,无法转换****");
}
}
* 转换成swf
void pdf2swf() throws Exception
{
Runtime r=Runtime.getRuntime();
if(!swfFile.exists())
{
if(pdfFile.exists())
{
if(environment==1)windows环境处理
{
try {
Process p=r.exec("C:/Program Files/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 (Exception 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()+"****");
throw e;
}
}
}
else {
System.out.println("****pdf不存在,无法转换****");
}
}
else {
System.out.println("****swf已存在不需要转换****");
}
}
static String loadStream(InputStream in) throws IOException
{
int ptr=0;
in=new BufferedInputStream(in);
StringBuffer buffer=new StringBuffer();
while((ptr=in.read())!=-1)
{
buffer.append((char)ptr);
}
return buffer.toString();
}
* 转换主方法
boolean conver()
{
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) {
TODO: Auto-generated catch block
e.printStackTrace();
false;
}
if(swfFile.exists())
{
true;
}
else {
false;
}
}
* 返回文件路径
* @param s
public String getswfPath()
{
if(swfFile.exists())
{
String tempString =swfFile.getPath();
tempString=tempString.replaceAll("\","/");
return tempString;
}
else{
return "";
}
}
* 设置输出路径
void setOutputPath(String outputPath)
{
this.outputPath=outputPath;
if(!outputPath.equals(""))
{
String realName=fileName.substring(fileName.lastIndexOf("/"),fileName.lastIndexOf("."));
if(outputPath.charAt(outputPath.length())=='/')
{
swfFile=new File(outputPath+realName+".swf");
}
else
{
swfFile=new File(outputPath+realName+".swf");
}
}
}
void main(String s[])
{
DocConverter d=new DocConverter("c:/temp/111.ppt");
d.conver();
}
}

在DocConverter.java,右键属性 - >Run as - >Java Application ,输出main的测试结果。笔者分别进行单个转换,及批量转换,都测试可行。
至于为什么能成功进行pdf及swf的完整转换,在代码中没有看到和上述问题相关的控制。笔者在得到预期的结果,偶尔也会装糊涂,不去继续深究。