借助flexpaper實現word在線預覽和打印


為了實現word能夠在web上盡量以原始的排版樣式展現出來,選擇基於activex控件的方式太過於依賴某種瀏覽器,並且存在可能需要花費金錢購買相應的控件產品;於是借助flexpaper這種flash展現方式就成為了首選的解決方案。該方案的實現過程主要是先將word文檔轉換成pdf文檔,接着再通過SWFTOOLS工具將pdf文檔轉換成swf文件,然后flexpaper加載這些swf文件進行展示。

訪問flexpaper的官網地址:http://flexpaper.devaldi.com/download/  下載web版的flexpaper,同時把需要用到的3個軟件也下載下來。我當前下載的最新版本是FlexPaper_2.3.6版。

先安裝好下載好的3個軟件包:

接着解壓FlexPaper_2.3.6

可以看到解壓后的文件目錄里提供了asp.net版本、java版本和php版本,在這里我選擇部署的是java版本,打開java目錄,可以看到一個war包,將其部署到tomcat里,然后啟動tomcat訪問所部署的flexpaper的根路徑。初次訪問會跳轉到一個配置的頁面,通過該頁面進行設置管理員賬號密碼、配置上面所提到的3個軟件的安裝路徑,然后還有配置需要轉換的pdf所在的目錄及轉換后的swf文件存放的目錄,這兩個目錄都需要事先創建好。還有另外一個重要的配置是swf的生成模式,flexpaper提供了單文件模式和多文件模式,如果選擇單文件模式,那么一個pdf文檔轉換成swf時,就只生成一個swf文件;如果選擇多文件模式,那么一個pdf文檔里如果有好幾頁的內容,那么就會生成多個相對應的swf文件。

之后只要根據你所配置的文件模式訪問剛部署的flexpaper的對應url,並且在url上的doc參數里傳遞你所配置的pdf目錄下的pdf文件名就可以直接在線預覽到pdf文件了。

單文件模式時訪問的url:http://127.0.0.1:8080/FlexPaper/common/simple_document.jsp?doc=660521783206862.pdf

多文件模式時訪問的url:http://127.0.0.1:8080/FlexPaper/common/split_document.jsp?doc=660521783206862.pdf

 

接下來就是需要在程序中把word文檔轉換成pdf文檔,並將其保存到上面所提到的pdf目錄下,以便實現word文檔的在線瀏覽。

在這里我使用的是java語言,使用了artofsolving的jodconverter包來進行doc到pdf的轉換,轉換需要借助OpenOffice,所以還需要下載安裝OpenOffice。

我當前下載安裝的OpenOffice版本為4.1.2版。

 

jodconverter用得多的主要有兩個版本,一個是2.2.1版,另外一個是3.0-beta4版本。

 

2.2.1版

2.2.1不支持docx格式,並且需要事先通過命令行開啟OpenOffice的服務,

開啟OpenOffice服務的命令行代碼如下:

cd d:\Program Files (x86)\OpenOffice 4\program
soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard

java關鍵代碼:

// connect to an OpenOffice.org instance running on port 8100  
            OpenOfficeConnection connection = new SocketOpenOfficeConnection(  
                    "127.0.0.1", 8100);  
            connection.connect();  
  
            // convert  
            DocumentConverter converter = new OpenOfficeDocumentConverter(  
                    connection);  
            converter.convert(inputFile, outputFile);  
  
            // close the connection  
            connection.disconnect();  

如果使用maven來進行管理的,那么2.2.1版的依賴配置如下:

<dependency>
    <groupId>com.artofsolving</groupId>
    <artifactId>jodconverter</artifactId>
    <version>2.2.1</version>
</dependency>

 

3.0-beta4版

 3.0-beta4支持docx版本,並且不需要事先通過命令行開啟OpenOffice服務,而是可以通過java代碼來進行開啟和關閉。

java關鍵代碼:

private  static OfficeManager officeManager;

public static void convert(File originFile,File destFile){
         long startTime = System.currentTimeMillis();
         startService();        
         OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);
         converter.convert(originFile,destFile);
         log.info("轉換完成.耗時" +( (System.currentTimeMillis() - startTime) / 1000)+ "秒");
         stopService();
    }

    private static void startService(){
        DefaultOfficeManagerConfiguration configuration=new DefaultOfficeManagerConfiguration();
        log.info("准備啟動office轉換服務...");
        configuration.setOfficeHome("D:/Program Files (x86)/OpenOffice 4");
        configuration.setPortNumber(8100);
        configuration.setTaskExecutionTimeout(1000*60);//任務超時時間1分鍾
        try {
            officeManager=configuration.buildOfficeManager();
            officeManager.start();//啟動服務
            log.info("office轉換服務啟動成功!");
        } catch (OfficeException e) {
            log.error("office轉換服務啟動失敗!");
        } catch (IllegalStateException e) {
            log.error("office轉換服務啟動失敗!");
        }
    }
    
    private static void stopService(){
        if(officeManager!=null){
            officeManager.stop();
            log.info("office轉換服務關閉成功!");
        }else{
            log.info("office轉換服務未啟動!");
        }
    }

如果使用maven來進行管理的,3.0-beta4版通過maven中央庫下載不到,需要自己通過artofsolving的網站把jar下載下來,然后注冊到自己本地的maven倉庫里。

jodconverter-core-3.0-beta-4.bat:

mvn install:install-file -DgroupId=com.artofsolving -DartifactId=jodconverter -Dversion=3.0-beta-4 -Dpackaging=jar -Dfile=%CD%\jodconverter-core-3.0-beta-4.jar

pom配置:

<dependency>
            <groupId>com.artofsolving</groupId>
            <artifactId>jodconverter</artifactId>
            <version>3.0-beta-4</version>
        </dependency>
        <dependency>
            <groupId>org.openoffice</groupId>
            <artifactId>juh</artifactId>
            <version>3.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.openoffice</groupId>
            <artifactId>unoil</artifactId>
            <version>3.2.1</version>
        </dependency>
        <dependency>
            <groupId>commons-cli</groupId>
            <artifactId>commons-cli</artifactId>
            <version>1.1</version>
        </dependency>
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20090211</version>
        </dependency>

由於3.0-beta4的jar包是自己寫命令行注冊到本地maven庫里的,所以沒帶有其依賴包的關系,因此需要手動將其所依賴的其他jar包給配置到pom文件里。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM