2012-08-27 27 views
5

我有一個web應用程序。我已經在服務器端以xml格式(Word 2003 XML文檔)生成了MS Word文檔。我需要使用某種查看器將此文檔顯示給客戶端的用戶。所以,問題是:我可以用什麼庫來解決這個問題?我需要一個API來使用java來查看客戶端上的word文檔。用java applet查看.doc文件

+0

鑑於服務器端代碼生成報告,爲什麼不生成它作爲HTML並將其顯示在瀏覽器選項卡中的「JEditorPane」? –

+0

,因爲任務是生成doc報告,如果需要,可以用ms字打開。 – kant

+0

如果用戶想要在MS Word中打開它,請將word doc直接推送到具有適當內容類型的瀏覽器。 (請注意,在此框中它將由Open Office加載。)如果用戶想要先預覽它,請將其生成爲HTML並在瀏覽器中顯示它。 –

回答

4

您無法在使用Java(或任何其他簡單技術)的網頁中可靠地顯示Word文檔。有幾個商業圖書館用於渲染Word,但是您不會覺得這些是簡單,便宜或可靠的解決方案。

你應該做的是:

(1)使用.NET程序 (2)將文檔轉換爲使用Word發動機富文本打開Word引擎在服務器上 (3)顯示豐富的文本或者使用RTF格式的Swing控件,或轉換成HTML:

String rtf = [your document rich text]; 
BufferedReader input = new BufferedReader(new StringReader(rtf)); 

RTFEditorKit rtfKit = new RTFEditorKit(); 
StyledDocument doc = (StyledDocument) rtfKit.createDefaultDocument(); 
rtfEdtrKt.read(input, doc, 0); 
input.close(); 

HTMLEditorKit htmlKit = new HTMLEditorKit();  
StringWriter output = new StringWriter(); 
htmlKit.write(output, doc, 0, doc.getLength()); 

String html = output.toString(); 

在這種方法的主要風險是,字引擎要麼崩潰或有內存泄漏。出於這個原因,你必須有一個機制來定期重新啓動它並對其進行測試,以確保它正常工作,而不是佔用內存。

1

docx4all是一個基於Swing的小程序,它執行Word 2007 XML(即不是Word 2003 XML),這是我們幾年前寫的。

svn得到它。

這是一種可能的編輯方法。如果你想要的只是一個查看器,而不是轉換爲HTML或PDF格式?你可以使用docx4j。 (披露:「我的」項目)。

+0

如果我理解正確,docx4j可以通過applet查看xml doc文件嗎? – kant

+0

是否可以使用jasperreport的JRViewer類查看Doc文件? – kant

+0

docx4all applet使用docx4j查看/編輯docx文件 – JasonPlutext

1

您可能會看到Apache POI - Java API to Handle Microsoft Word Files,它能夠讀取各種文檔(分別爲OLE2和OOXML格式,.doc和.docx擴展名)。

讀取DOC文件可以很容易爲:

import java.io.*; 
import org.apache.poi.hwpf.HWPFDocument; 
import org.apache.poi.hwpf.extractor.WordExtractor; 

public class ReadDocFile { 
public static void main(String[] args) { 
File file = null; 
WordExtractor extractor = null ; 
try { 

file = new File("c:\\New.doc"); 
FileInputStream fis=new FileInputStream(file.getAbsolutePath()); 
HWPFDocument document=new HWPFDocument(fis); 
extractor = new WordExtractor(document); 
String [] fileData = extractor.getParagraphText(); 
for(int i=0;i<fileData.length;i++){ 
if(fileData[i] != null) 
System.out.println(fileData[i]); 
} 
} 
catch(Exception exep){} 
} 
} 

你可以找到更多的:HWPF Quick-Guide(特別HWPF unit tests

需要注意的是,根據POI網站:

HWPF仍處於早期發展階段。

+0

我需要編寫doc文件。 'POI'不適用於此。 – kant

0

我建議看看openoffice源代碼並實現它。 它應該是用java編寫的。