zoukankan      html  css  js  c++  java
  • 仿百度文库方案[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的完整转换,在代码中没有看到和上述问题相关的控制。笔者在得到预期的结果,偶尔也会装糊涂,不去继续深究。

  • 相关阅读:
    Java Volatile keyword
    解决 The 'InnoDB' feature is disabled; you need MySQL built with 'InnoDB' to have it working
    【玩转cocos2d-x之三十九】Cocos2d-x 3.0截屏功能集成
    【DP】UVA 624 CD 记录路径
    ns3加入模块之vanet-highway
    awk向脚本传递參数(二)
    【传递正能量】献给默默追梦的人
    算法(第四版)学习笔记之java实现可以动态调整数组大小的栈
    Webstorm/IntelliJ Idea 过期破解方法
    CenterOS下安装NodeJS
  • 原文地址:https://www.cnblogs.com/m3Lee/p/3849128.html
Copyright © 2011-2022 走看看