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

原文出处:http://www.cnblogs.com/star-studio/archive/2011/12/12/2284417.html

第五步,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的完整转换,在代码中没有看到和上述问题相关的控制。笔者在得到预期的结果,偶尔也会装糊涂,不去继续深究。

你可能感兴趣的:(OpenOffice)