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',