實現一個具有百度文庫文件轉換功能的工具類
轉載請註明來自“柳大的CSDN部落格”,原文地址:http://blog.csdn.net/poechant/article/details/7238056
用過百度文庫、豆丁的朋友,都知道,我們只要將文件上傳到這些網站上,就可以實現分享。無論你上傳的是pdf、ppt,還是doc、txt、pptx檔案,都會在網頁上顯示給使用者看。從技術上簡單地說,可以分成三步:
(1)將格式為x的文件檔案上傳到伺服器;
(2)在伺服器上完成文件的相關處理;
(3)將處理後的結果展示在網頁上。
其中最關鍵的一步就是(2)。做技術的人都可以很容易地看出來,這類用web應用是用flash顯示出來的。那麼,一個文件檔案,是如何轉換為swf檔案的呢?本文就將為你介紹,如何避免“再造車輪”的冗餘行為發生,而藉助高效的工具將doc、ppt、pdf等文件檔案轉換為swf格式。比如百度文庫接收使用者上傳的檔案後,顯示在網頁上時是其轉換成的SWF格式檔案。這樣就很適合Web應用了。
一、JODConverter
首先利用JODConverter將doc、ppt、txt、docx等檔案轉換為pdf檔案。然後用SwfTools將pdf檔案轉換為swf檔案。JODConverter是一個名叫Java OpenDocument Converter的基於LGPL協議的軟體,用於實現不同的office格式之間的轉換,這些office格式包括Microsoft Office和OpenOffice。JODConverter的專案主頁是http://www.artofsolving.com/opensource/jodconverter,可以檢視更多的資訊。可以通過SourceForge.net下載。
首先要安裝OpenOffice,JODConverter的功能,基本就是實現了OpenOffice中的另存為的功能。個版本的OpenOffice的下載地址為:
Language The names do not refer to countries.
|
Windows Intel MSI |
Linux Intel RPM |
Linux Intel DEB |
Linux x86-64 RPM |
Linux x86-64 DEB |
MacOS Intel DMG |
MacOS PPC¹ DMG |
Solaris Intel PKG |
Solaris Sparc PKG |
|
Arabic |
عربي |
|
||||||||
Basque |
Euskara |
|||||||||
Bengali |
বাংলা |
|||||||||
Bulgarian |
български език |
|
||||||||
Catalan |
Català |
|||||||||
Catalan (Valencian) |
Català (Valencià) |
not available |
||||||||
Chinese (simplified) |
簡體中文 |
|
||||||||
Chinese (traditional) |
正體中文 |
|
||||||||
Czech |
čeština |
|
||||||||
Danish |
Dansk |
|||||||||
Dutch |
Nederlands |
|||||||||
English (British) |
English (British) |
|
||||||||
English (US) |
English (US) |
|||||||||
Estonian |
Eesti keel |
|
||||||||
Finnish |
Suomi |
|
|
|
||||||
French |
Français |
|||||||||
Galician |
Galego |
|
||||||||
German |
Deutsch |
|||||||||
Greek |
Ελληνικά |
|
||||||||
Hebrew |
עִבְרִית |
|||||||||
Hungarian |
Magyar |
|
||||||||
Irish |
Gaeilge |
|
||||||||
Italian |
Italiano |
|
|
|
||||||
Language The names do not refer to countries.
|
Windows Intel MSI |
Linux Intel RPM |
Linux Intel DEB |
Linux x86-64 RPM |
Linux x86-64 DEB |
MacOS Intel DMG |
MacOS PPC¹ DMG |
Solaris Intel PKG |
Solaris Sparc PKG |
|
Japanese |
日本語 |
|||||||||
Khmer |
ភាសាខ្មែរ |
|||||||||
Korean |
한국어 |
|
|
|
||||||
Kurdish |
Kurdî |
|
|
|
|
|
|
|
|
|
Lithuanian |
Lietuvių |
|||||||||
Macedonian |
Македонски |
|||||||||
Mongolian |
Монгол |
|
|
|
|
|
|
|||
Norwegian (Bokmål) |
Norsk (Bokmål) |
|
||||||||
Norwegian (Nynorsk) |
Norsk (Nynorsk) |
|
|
|
|
|||||
Oromo |
ኦሮሚኛ |
|
||||||||
Polish |
Polski |
|
||||||||
Portuguese (Brazilian) |
Português (do Brasil) |
|
||||||||
Portuguese (European) |
Português (Europeu) |
|
||||||||
Russian |
Русский |
|
||||||||
Serbian (Cyrillic) |
Cрпски (ћирилицом) |
|
||||||||
Serbian (Latin) |
Srpski (latinicom) |
|
||||||||
Slovenian |
Slovenski jezik |
|||||||||
Spanish |
Español |
|||||||||
Swedish |
Svenska |
|||||||||
Turkish |
Türkçe |
|
||||||||
Vietnamese |
Tiếng Việt |
|
安裝完OpenOffice後,要記住你的OfficeHome。不同平臺的OfficeHome是不同的。比如你將OpenOffice安裝到Windows的“D:\Program Files\OpenOffice.org 3”,那麼這就是你在Windows上的OfficeHome。如果你是Linux使用者,你可能會將OpenOffice安裝到“/opt/openoffice.org3”,這就是你的OfficeHome。如果你是Mac使用者,在Mac系統的自動安裝後,你需要知道你的OfficeHome為“/Application/OpenOffice.org.app/Contents”。
一定要知道你的OfficeHome,否則JODConverter是沒法工作的。然後下載JODConverter API,下載頁:http://sourceforge.net/projects/jodconverter/
二、SwfTools
然後利用SwfTools就中間生成的pdf檔案,轉換為swf檔案。SwfTools是將各種不同格式的檔案轉換為Adobe Flash的swf格式檔案的軟體,可以執行在Linux、Mac、FreeBSD等Unix-like系統以及Windows系統上。它可以實現pdf、avi、wav、png、jpeg、gif等格式向swf格式的轉換。該專案主頁是http://www.swftools.org/,在http://www.swftools.org/download.htmlx下載。
1、Windows(Linux和Mac使用者可以忽略)
(1)下載安裝swftools
下載地址:swftools-0.9.1.exe
安裝目錄:D:\Program Files\swftools
(2)將不同格式的檔案轉換為SWF
使用安裝目錄下的轉換命令:
avi2swf inputFile -o outputFile
font2swf inputFile -o outputFile
gif2swf inputFile -o outputFile
jpeg2swf inputFile -o outputFile
pdf2swf inputFile -o outputFile
png2swf inputFile -o outputFile
wav2swf inputFile -o outputFile
2、Linux(Windows和Mac使用者可以忽略)
(1)安裝依賴庫
sudo apt-get install libpng12-dev
sudo apt-get install libjpeg62-dev
sudo apt-get install libgif-dev
sudo apt-get install libfreetype6-dev
(2)安裝swftools
wget http://www.swftools.org/swftools-0.9.1.tar.gz
tar zxvf swftools-0.9.1.tar.gz
cd swftools-0.9.1
./configure
make
sudo make install
(3)將其他檔案格式轉換為SWF
參考Windows平臺上的SwfTools使用。
3、Mac(Windows和Linux使用者可以忽略)
(1)安裝swftools
最簡單的方式,是用macport、fink等來安裝。macport的命令為:
sudo port install swftools
用MacPort安裝SwfTools,不需要考慮其依賴庫,MacPort會幫助你安裝好。MacPort的安裝,請參考《Mac OS X Lion安裝MacPorts(讓你在Mac的Shell下更加遊刃有餘)》一文。
(2)將其他檔案格式轉換為SWF
參考Windows平臺上的SwfTools使用。
三、Java例項實現各office檔案格式向swf的轉換
建立一個實現型別轉換的工具類,命名為FileConverterUtil,如下:
public class FileConverterUtil {
public static String fileToSwf(String inputFilePath) {
return pdfToSwf(fileToPdf(inputFilePath));
}
private static String fileToPdf(String inputFilePath) {
//...
}
private static String pdfToSwf(String inputFilePath) {
//...
}
}
然後分別實現fileToPdf和pdfToSwf。fileToPdf中使用到JODConverter的API,如下:
import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;
import org.artofsolving.jodconverter.office.OfficeManager;
import org.artofsolving.jodconverter.OfficeDocumentConverter;
import java.io.File;
private static String fileToPdf(String inputFilePath) {
DefaultOfficeManagerConfiguration config = new DefaultOfficeManagerConfiguration();
String officeHome = getOfficeHome();
config.setOfficeHome(officeHome);
OfficeManager officeManager = config.buildOfficeManager();
officeManager.start();
OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);
String outputFilePath = getOutputFilePath(inputFilePath);
converter.convert(new File(inputFilePath), new File(outputFilePath));
officeManager.stop();
}
其中getOfficeHome()可以根據你使用該工具類的平臺增加程式的可移植性。fileToPdf可以實現各種office檔案到pdf檔案的轉換。
private static String getOfficeHome(String inputFilePath) {
String osName = System.getProperty("os.name");
if (Pattern.matches("Linux.*", osName) {
return "/opt/openoffice.org3";
} else if (Pattern.matches("Windows.*", osName) {
return "D:\\Applications\\OpenOffice.org 3";
} else if (Pattern.matches("Mac.*", osName) {
return "/Application/OpenOffice.org.app/Contents";
}
return null;
}
提供統一的轉換檔案命名規則,可以提供如下方法,具體實現看你應用場景的方便性了。
private static String getOutputFilePath(String inputFilePath) {
// Initialized by yourself.
}
然後利用SwfTools實現PdfToSwf方法。
private static String pdfToSwf(String inputFilePath) {
try {
String outputFilePath = getOutputFilePath(inputFilePath);
String[] command = new String[4];
command[0] = getSwftoolsHome();
command[1] = inputFilePath;
command[2] = "-o";
command[3] = outputFilePath;
Process process = Runtime.getRuntime().exec(command);
process.waitFor();
return outputFilePath;
} catch (Exception e) {
// initialized by yourself.
}
}
其中getSwftoolsHome方法就是獲取你的SwfTools所在目錄,依據不同平臺,你可以如下實現該方法:
private static String getSwftoolsHome() {
String osName = System.getProperty("os.name");
if (Pattern.matches("Linux.*", osName) {
return "/usr/local/bin";
} else if (Pattern.matches("Windows.*", osName) {
return "D:\\Program Files\\SwfTools";
} else if (Pattern.matches("Mac.*", osName) {
return "/usr/local/bin";
}
return null;
}
這樣類似於百度文庫、豆丁網的文件轉換工具的核心功能就基本實現了。Enjoy It!
轉載請註明來自“柳大的CSDN部落格”,原文地址:http://blog.csdn.net/poechant/article/details/7238056
-
相關文章
- 實現一個切換配方的功能
- 實現一個CRDT工具庫——VClock 時鐘向量類
- XSLT實現XML文件轉換成HTML文件XMLHTML
- 帶你實現一個簡單的MYSQL資料庫生成實體類工具MySql資料庫
- 資料庫工具類實現資料庫
- Date轉換工具類
- 百度文庫、道客巴巴等文件的又一獲取方法
- 寫一個工具生成資料庫實體類資料庫
- 手寫一個HTTP框架:兩個類實現基本的IoC功能HTTP框架
- DocHub文庫系統v1.1版本釋出,類百度文庫開源實現方案
- 實現 Python 與 JavaScript 程式碼轉換的4個工具PythonJavaScript
- java工具類之編碼轉換工具類Java
- 模仿百度文庫線上瀏覽功能
- 型別轉換工具類型別
- 進位制轉換的工具類
- Docxtor(iWork 文件批量轉換工具)
- 實現類似IE的列印網頁功能 (轉)網頁
- 一個分數類的實現——Rational類
- cocos2dx封裝一個具有Layout功能的Point類 (提供原始碼)封裝原始碼
- LocalDateTime工具類(常用轉換)LDA
- 一個轉換資料屬性名的工具
- List<實體類>轉換成map 一個鍵對應多個值
- 仿百度文庫文件上傳頁面的多級聯動分類選擇器
- 一個工具類實現自定義Tablayout的下劃線寬度TabLayout
- javascript如何實現類的功能JavaScript
- 具有edit功能的combobox (轉)
- 如何實現將markdown檔案實時轉換為html文件HTML
- 開源一個自用的Android事件分發中心庫,實現類似系統廣播功能。Android事件
- 一個用功能強大的ODBC API 函式訪問資料庫類 (轉)API函式資料庫
- jquery實現的具有漸變效果的圖片切換jQuery
- C++實現進位制轉換工具C++
- js仿百度文庫文件上傳頁面的分類選擇器_第二版JS
- 字串與日期型別轉換的工具類字串型別
- 【Android初級】如何實現一個具有選擇功能的對話方塊效果(附原始碼)Android原始碼
- 一個基於百度飛槳封裝的.NET版本OCR工具類庫 - PaddleOCRSharp封裝
- Doxillion Plus for mac(多格式文件轉換工具)Mac
- Visual C++實現檔案間批次轉換功能 (轉)C++
- gohook 一個支援執行時替換 golang 函式的庫實現HookGolang函式