仿百度文库方案[openoffice.org 3+swftools+flexpaper](五) 之 转换pdf的同时,进一步转为swf

来源:互联网 发布:龙江网络 编辑:程序博客网 时间:2024/04/28 01:54

第五步,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     */    public void setFile(String fileString)    {        ini(fileString);    }        /*     * 初始化     * @param fileString     */    private 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     */    private 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转换器异常,读取转换文件失败****");                    throw e;                }                catch(Exception e)                {                    e.printStackTrace();                    throw e;                }            }            else            {                System.out.println("****已经转换为pdf,不需要再进行转化****");            }        }        else        {            System.out.println("****swf转换器异常,需要转换的文档不存在,无法转换****");        }    }        /*     * 转换成swf     */    private 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()+"****");                        if(pdfFile.exists())                        {                            pdfFile.delete();                        }                    } catch (Exception e) {                        e.printStackTrace();                        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();    }        /*     * 转换主方法     */    public 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();            return false;        }                if(swfFile.exists())        {            return true;        }        else {            return false;        }    }        /*     * 返回文件路径     * @param s     */    public String getswfPath()    {        if(swfFile.exists())        {            String tempString =swfFile.getPath();            tempString=tempString.replaceAll("\\\\", "/");            return tempString;        }        else{            return "";        }    }        /*     * 设置输出路径     */    public 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");            }        }    }        public static void main(String s[])    {        DocConverter d=new DocConverter("c:/temp/111.ppt");        d.conver();    }}
复制代码

在DocConverter.java,右键属性 - >Run as - >Java Application ,输出main的测试结果。笔者分别进行单个转换,及批量转换,都测试可行。

至于为什么能成功进行pdf及swf的完整转换,在代码中没有看到和上述问题相关的控制。笔者在得到预期的结果,偶尔也会装糊涂,不去继续深究。

原创粉丝点击