1. 程式人生 > >openoffice/libreoffice++jodconvert++swfTools++flaxpaper實現文件線上瀏覽

openoffice/libreoffice++jodconvert++swfTools++flaxpaper實現文件線上瀏覽

文件線上瀏覽總體步驟說明:

1、利用openoffice或libreoffice與jodconvert結合,將word,Excel等等office檔案轉換為PDF格式的檔案。

2、利用swfTools安裝後包中的PDF2swf.exe將PDF檔案轉為swf格式的檔案。

3、利用flaxpaper實現線上開啟。

————————————第一步:轉為PDF——————————————

轉換word,PPT,Excel,TXT等等檔案為PDF格式:

方法一:使用openoffice+jodconvert

準備工作:下載安裝openoffice    地址:http://www.openoffice.org/download/index.html

                下載jodconverter   下載地址:https://sourceforge.net/projects/jodconverter/

                 匯入jodconverter對應的jar包,為所下載的jodconverter.zip中libs目錄下的jar包。包括:

程式碼:

import java.io.File;
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;


public class convert {
	
	public String doc2Pdf(String docFileName) {
		File docFile = new File(docFileName);
		String noExt = docFileName.substring(0, docFileName.lastIndexOf("."));
		File pdfFile = new File(noExt + ".pdf");
		StringBuffer sb = new StringBuffer("");
		String res = "";
		if (docFile.exists()) {
			OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
			try {
				connection.connect();
				DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
				converter.convert(docFile, pdfFile);
				connection.disconnect();
			} catch (Exception e) {
				e.printStackTrace();
				sb.append("轉換異常");
			}
		} else {
			sb.append("需要轉換的檔案不存在");
		}
		sb.append(res);
		return sb.toString();
	}
}

方法二:使用libreoffice+jodconvert

準備工作:下載安裝libreoffice     地址:https://www.libreoffice.org/download/download/

        匯入jodconverter-core-3.0-beta-4.jar   下載地址:http://download.csdn.net/download/rory898863935/10255288

程式碼:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.regex.Pattern;

import org.apache.commons.io.FileUtils;
import org.artofsolving.jodconverter.OfficeDocumentConverter;
import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;
import org.artofsolving.jodconverter.office.OfficeManager;

  
public class convertLibre {
	
    /** 
     * 轉換libreoffice支援的檔案為pdf 
     * @param inputfile 
     * @param outputfile 
     */  
    public String office2Pdf(String docFileName) {
        String LibreOffice_HOME = getLibreOfficeHome();
        File docFile = new File(docFileName);
	String noExt = docFileName.substring(0, docFileName.lastIndexOf("."));
	File pdfFile = new File(noExt + ".pdf");
	StringBuffer sb = new StringBuffer("");
        DefaultOfficeManagerConfiguration configuration = new DefaultOfficeManagerConfiguration();
        configuration.setOfficeHome(new File(LibreOffice_HOME));
        configuration.setPortNumber(8100);
        OfficeManager officeManager = configuration.buildOfficeManager();  
        officeManager.start();
        OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);  
        try {  
            converter.convert(docFile, pdfFile);
            sb.append("success");
        } catch (Exception e) {
        	sb.append("轉換異常");
            e.printStackTrace();  
        } finally {
            officeManager.stop();  
        }
        return sb.toString();
    }  
    
}

————————————第二步:PDF轉為swf————————————

將轉換好的PDF檔案轉為swf檔案。如果要開啟的是PDF,則可以直接跳過第一步。

準備工作:下載swftools。 地址:https://swftools.en.softonic.com/download

下載安裝後,在安裝目錄找到PDF2swf.exe,將檔案拷貝到專案路徑下。

程式碼:

public String pdf2swf(String noExt) {
		Runtime r = Runtime.getRuntime();
		File swfFile = new File(noExt + ".swf");
		File pdfFile = new File(noExt + ".pdf");
		File pdfFile2 = new File(noExt + ".pdf");
		StringBuffer sb = new StringBuffer("");
		if (!swfFile.exists()) {
			if (environment == 1) {// windows環境處理
				try {
					File tempPdf = new File(pdfFile.getPath().substring(0, pdfFile.getPath().lastIndexOf("\\") + 1) + "temp.pdf");
					pdfFile.renameTo(tempPdf);// 防止因為檔名導致的轉換錯誤
					String relPath = convert.class.getResource(convert.class.getSimpleName() + ".class").toString();
					String swfPath = relPath.substring(relPath.indexOf("fiel:/") + 7, relPath.indexOf("/WEB-INF"))
							+ "/pdf/pdf2swf.exe ";
					String cmd = swfPath + tempPdf.getPath() + " -o " + swfFile.getPath() + " -T 9";
					Process p = r.exec(cmd);
					boolean finish = true;
					while (finish) {
						if (!swfFile.exists()) {
							Thread.sleep(500);
						} else {
							finish = false;
						}
					}
					if (pdfFile.exists()) {
						pdfFile.renameTo(pdfFile2);
					}
					sb.append("success");
				} catch (Exception e) {
					e.printStackTrace();
					sb.append("轉換為swf失敗");
				}
			} else if (environment == 2) {// linux環境處理
				try {
					Process p = r.exec("pdf2swf " + pdfFile.getPath() + " -o " + swfFile.getPath() + " -T 9");
					if (pdfFile.exists()) {
						pdfFile.delete();
					}
					sb.append("success");
				} catch (Exception e) {
					e.printStackTrace();
					sb.append("轉換為swf失敗");
				}
			}
		} else {
			sb.append("success");
		}
		return sb.toString();
	}

——————————第三步:使用flaxpaper開啟swf檔案————————

準備工作:下載flaxpaper      地址:http://download.csdn.net/download/rory898863935/10255338

將所下載的壓縮包中的,flexpaper_flash.js和FlexPaperViewer.swf。放在專案指定的位置。

flexpaper_flash.js和FlexPaperViewer.swf是實現swf檔案線上瀏覽的必須檔案。

flexpaper_repair.js可以解決某些瀏覽器無法開啟的情況,解決了相容性問題,可以使得所有的瀏覽器都可以正常線上瀏覽。

flexpaper_repair.js下載地址:http://download.csdn.net/download/rory898863935/10255347

jsp程式碼:

<body>
<script type="text/javascript">
var params=location.search.substring(1);
var fileName=params.substring(params.indexOf("=")+1);
fileName=unescape(fileName);
</script> 
<script type="text/javascript" src="js/flexpaper_repair.js"></script> 
<script type="text/javascript" src="js/flexpaper_flash.js"></script> 
	<div style="width:85%;margin:0 auto;height:800px;">
		<a id="viewerPlaceHolder"></a>
	    <script type="text/javascript">
			swfPath = '/a1/upload/'+fileName+'.swf';
				var fp = new FlexPaperViewer(
						'/a1/flexpaper/FlexPaperViewer',
						 'viewerPlaceHolder', { config : {
						 SwfFile : escape(swfPath),
						 Scale : 1, 
						 ZoomTransition : 'easeOut',
						 ZoomTime : 0.5,
						 ZoomInterval : 0.2,
						 FitPageOnLoad : false,
						 FitWidthOnLoad : true,
						 PrintEnabled : true,
						 FullScreenAsMaxWindow : false,
						 ProgressiveLoading : false,
						 MinZoomSize : 0.2,
						 MaxZoomSize : 5,
						 SearchMatchAll : false,
						 InitViewMode : 'Portrait',
						 
						 ViewModeToolsVisible : true,
						 ZoomToolsVisible : true,
						 NavToolsVisible : true,
						 CursorToolsVisible : true,
						 SearchToolsVisible : true,
  						
  						 localeChain: 'zh_CN'
						 }});
		</script>
	</div>
</body>

問題解決:很多人執行了上面所有的步驟,但是無法開啟,90%都是路徑有問題,路徑是指要開啟的swf檔案路徑和flexpaperViewer.swf檔案路徑。

在程式碼的這裡:swfPath為要開啟的檔案,fp為flexpaperViewer.swf的路徑,兩者在前面都要加專案。

比如swf檔案在專案(kk)/web/asd/test.swf。那麼這裡就應該寫/kk/asd/test.swf。

swfPath = '/a1/upload/'+fileName+'.swf';
				var fp = new FlexPaperViewer(
						'/a1/flexpaper/FlexPaperViewer',