模仿百度文庫線上瀏覽功能
這個功能可能很多人都知道是怎麼回事了。不過還是寫給那些有興趣愛好的人,而又不知道的人吧。這個東西百度上一搜一大把。但是都比較零散。所以我這個也算是一個整理。
需要用的工具: OpenOffice.org3 swftloos jodconverter flexpaper 需要用到的包: 親。在jodconverter裡面自己找吧。
大致思路: 就是講使用者上傳的msoffice文件進行轉換。首先通過OpenOffice將msoffice文件轉換成pdf.然後通過swftools將pdf轉換成swf檔案。最後通過flexpaper進行展示。jodconverter是進行轉換的第三方外掛。
轉換成pdf原始碼:
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Pattern;
import org.artofsolving.jodconverter.OfficeDocumentConverter;
import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;
import org.artofsolving.jodconverter.office.OfficeManager;
public class OfficeToPdf {
/**
* 將Office文件轉換為PDF. 執行該函式需要用到OpenOffice
*
* @param sourceFile
* 原始檔,絕對路徑. 可以是Office2003-2007全部格式的文件, Office2010的沒測試. 包括.doc,
* .docx, .xls, .xlsx, .ppt, .pptx,.dot等.
*
* @param destFile
* 目標檔案.絕對路徑.
* @throws IOException
*/
public static String word2pdf(String inputFilePath) throws IOException {
String converterPath = inputFilePath.substring(0,inputFilePath.lastIndexOf("/"))+"/temp";
//建立連線
DefaultOfficeManagerConfiguration config = new DefaultOfficeManagerConfiguration();
//獲取openoffice home
String officeHome = getOfficeHome();
config.setOfficeHome(officeHome);
//啟動服務
OfficeManager officeManager = config.buildOfficeManager();
officeManager.start();
OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);
//獲取swf名稱
String swfname = getDate();
//制定輸出路徑
String fileName = inputFilePath.substring(inputFilePath.lastIndexOf("/"),inputFilePath.lastIndexOf("."));
String outputFilePath = converterPath+fileName+".pdf";
System.out.println("openoffice轉換時的輸出路徑_"+outputFilePath);
File inputFile = new File(inputFilePath);
System.out.println("openoffice轉換時的輸入路徑_"+inputFile);
if (inputFile.exists()) {// 找不到原始檔, 則返回
File outputFile = new File(outputFilePath);
if (!outputFile.getParentFile().exists()) { // 假如目標路徑不存在, 則新建該路徑
outputFile.getParentFile().mkdirs();
}
try{
converter.convert(inputFile, outputFile);
}catch(Exception e){
e.printStackTrace();
}
}
officeManager.stop();
String swfpath = PdfToSwf.pdf2swf(outputFilePath,swfname);
return swfpath;
}
//時間獲取方法。用於設定swf的名稱
public static String getDate(){
Date date = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddhhmmss");
String datetime = format.format(date);
return datetime;
}
/**
* openoffice home 佈置專案時需更改
* @return
*/
public static String getOfficeHome() {
String osName = System.getProperty("os.name");
if (Pattern.matches("Linux.*", osName)) {
return OfficeViewPath.OpenOfficeHome_linux;
} else if (Pattern.matches("Windows.*", osName)) {
return OfficeViewPath.OpenOfficeHome_windows;
} else if (Pattern.matches("Mac.*", osName)) {
return OfficeViewPath.OpenOfficeHome_Mac;
}
return null;
}
}
轉換成swf原始碼:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class PdfToSwf {
/**
* 利用SWFTools工具將pdf轉換成swf,轉換完後的swf檔案與pdf同名
*
* @author iori
* @param fileDir
* PDF檔案存放路徑(包括檔名)
* @param exePath
* 轉換器安裝路徑
* @throws IOException
*/
public static synchronized String pdf2swf(String fileDir,String name)
throws IOException {
//swftools路徑。不知專案時需更改
String exePath = OfficeViewPath.SwfToolsHome;
// 檔案路徑
String filePath = fileDir.substring(0, fileDir.lastIndexOf("/"));
Process pro = null;
if (isWindowsSystem()) {
// 如果是windows系統
// 命令列命令
//"E:/SWFTools/pdf2swf.exe" "E:/Tomcat/webapps/CatsicProject/upload/zonggui/planning/problem/20130521052142/temp/[feiq]變更請求跟蹤表.pdf" -o "E:/Tomcat/webapps/CatsicProject/upload/zonggui/planning/problem/20130521052142/temp/20130521052146.swf" -s flashversion=9 -f
String cmd = exePath + " \"" + fileDir + "\" -o \"" + filePath + "/"+ name + ".swf\" -s flashversion=9 -f";
System.out.println("當前系統為windows,目錄為:"+cmd);
// Runtime執行後返回建立的程式物件
try{
pro = Runtime.getRuntime().exec(cmd);
}catch (Exception e) {
e.printStackTrace();
}
}
else {
// 如果是linux系統,路徑不能有空格,而且一定不能用雙引號,否則無法建立程式
String[] cmd = new String[3];
cmd[0] = exePath;
cmd[1] = fileDir;
cmd[2] = filePath + "/"+ name + ".swf";
// Runtime執行後返回建立的程式物件
System.out.println("當前系統為linux,目錄為:"+cmd);
pro = Runtime.getRuntime().exec(cmd);
}
// 非要讀取一遍cmd的輸出,要不不會flush生成檔案(多執行緒)
new DoOutput(pro.getInputStream()).start();
new DoOutput(pro.getErrorStream()).start();
try {
// 呼叫waitFor方法,是為了阻塞當前程式,直到cmd執行完
pro.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
}
return filePath+"/"+name+".swf";
}
/**
* 判斷是否是windows作業系統
*
* @author iori
* @return
*/
private static boolean isWindowsSystem() {
String p = System.getProperty("os.name");
return p.toLowerCase().indexOf("windows") >= 0 ? true : false;
}
/**
* 多執行緒內部類 讀取轉換時cmd程式的標準輸出流和錯誤輸出流,這樣做是因為如果不讀取流,程式將死鎖
*
* @author iori
*/
private static class DoOutput extends Thread {
public InputStream is;
// 構造方法
public DoOutput(InputStream is) {
this.is = is;
}
public void run() {
BufferedReader br = new BufferedReader(new InputStreamReader(this.is));
String str = null;
try {
// 這裡並沒有對流的內容進行處理,只是讀了一遍
while ((str = br.readLine()) != null);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
/**
* 測試main方法
*
* @param args
*/
/*public static void main(String[] args) {
// 轉換器安裝路徑
try {
PdfToSwf.pdf2swf("E:\\aaaa.pdf");
} catch (IOException e) {
System.err.println("轉換出錯!");
e.printStackTrace();
}
}*/
}
中間可能有一些開發人員可以通過上面的原始碼進行修改。改造成你專案中需要的方式。
相關文章
- [BUG反饋]IE瀏覽器,百度瀏覽器,搜狗瀏覽器批量操作功能都不相容!!!!傲遊、火狐、谷歌瀏覽器可以瀏覽器谷歌
- [python學習] 模仿瀏覽器下載CSDN源文並實現PDF格式備份Python瀏覽器
- 完全模仿掘金Android App大圖瀏覽拖拽效果!AndroidAPP
- js檢測搜狗瀏覽器、百度瀏覽器、微信瀏覽器程式碼例項JS瀏覽器
- Win10系統怎麼清理百度瀏覽器快取【圖文】Win10瀏覽器快取
- 瀏覽器的全屏功能小結瀏覽器
- apache關閉目錄瀏覽功能Apache
- js 呼叫瀏覽器複製功能JS瀏覽器
- Win10系統下百度瀏覽器翻譯功能的使用方法Win10瀏覽器
- 一文看透瀏覽器架構瀏覽器架構
- 瀏覽器渲染原理(一文搞懂)瀏覽器
- 夸克瀏覽器PC端功能體驗瀏覽器
- 實現一個具有百度文庫文件轉換功能的工具類
- win10系統下Edge瀏覽器如何禁用InPrivate無痕瀏覽功能Win10瀏覽器
- 線上代理瀏覽網站要怎麼做?網站
- 一文讀懂瀏覽器快取瀏覽器快取
- 在electron下實現PDF線上預覽功能
- php實現網站瀏覽足跡功能PHP網站
- js拖動滑塊瀏覽圖片功能JS
- 禁用瀏覽器控制檯除錯JavaScript功能瀏覽器除錯JavaScript
- 谷歌瀏覽器開啟實驗性功能谷歌瀏覽器
- Opera新瀏覽器整合廣告攔截功能瀏覽器
- 將萬惡的百度廣告從瀏覽器遮蔽瀏覽器
- mysql最新版中文參考手冊線上瀏覽MySql
- 小文:淺談瀏覽器發展簡史瀏覽器
- 谷歌瀏覽器翻譯在哪裡開啟 谷歌瀏覽器的線上翻譯在哪裡設定谷歌瀏覽器
- 直播平臺原始碼,圖片放大瀏覽功能原始碼
- IE瀏覽器版本過低簡單提示功能瀏覽器
- 檢測瀏覽器是否支援HTML5功能瀏覽器HTML
- 使用 Finder預覽功能,讓你可以快速瀏覽多個檔案!
- 瀏覽器資料庫 IndexedDB(一) 概述瀏覽器資料庫Index
- 急速 debug 實戰二(瀏覽器 - 除錯線上篇)瀏覽器除錯
- 譯文:瀏覽器輸入URL發生了什麼?瀏覽器
- 一文解決瀏覽器跨域問題瀏覽器跨域
- UC瀏覽器,QQ瀏覽器,百度app資訊流分享連結到微信朋友圈原理解析瀏覽器APP
- 【瀏覽器】瀏覽器基本工作原理瀏覽器
- 如何實現檔案轉換與線上預覽功能
- javascript瀏覽器端二進位制讀寫功能JavaScript瀏覽器