2012-08-27 12 views
5

Ho un'applicazione web. Ho generato documenti MS Word in formato xml (documento Word 2003 XML) sul lato server. Ho bisogno di mostrare questo documento a un utente su un lato client usando un qualche tipo di visualizzatore. Quindi, la domanda è: quali librerie posso usare per risolvere questo problema? Ho bisogno di un'API per visualizzare il documento word sul lato client utilizzando java.Visualizzazione del file .doc con l'applet java

+0

Dato che il codice lato server genera il report, perché non generarlo come HTML e visualizzarlo in una scheda del browser '01dagitalPane' ? –

+0

perché l'attività è di generare un rapporto doc, che può essere aperto in ms word se necessario. – kant

+0

Se l'utente desidera aprirlo in MS Word, spingere la parola doc direttamente nel browser con il tipo di contenuto appropriato. (Si noti che in questa finestra verrà caricato da Open Office.) Se l'utente vuole prima visualizzarlo in anteprima, generarlo come HTML e mostrarlo nel browser. –

risposta

4

Non è possibile visualizzare in modo affidabile un documento di Word in una pagina Web utilizzando Java (o qualsiasi altra tecnologia semplice). Ci sono diverse librerie commerciali disponibili per il rendering di Word, ma non le troverai come soluzioni facili, economiche o affidabili.

cosa si dovrebbe fare è la seguente:

(1) Aprire il motore di Word sul server utilizzando un programma .NET (2) convertire il documento in Rich Text utilizzando il motore di Word (3) Visualizzazione il testo ricco sia utilizzando il widget di RTF swing, o convertire in 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(); 

il rischio principale di questo approccio è che il motore di Word sarà o incidente o di avere una perdita di memoria. Per questo motivo è necessario disporre di un meccanismo per riavviarlo periodicamente e testarlo per assicurarsi che sia funzionale e non per conservare la memoria.

1

docx4all è un'applet basata su Swing che esegue Word 2007 XML (ovvero non Word 2003 XML), che abbiamo scritto diversi anni fa.

Scarica da svn.

Questo è un possibile approccio per la modifica. Se tutto ciò che vuoi è un visualizzatore, che non converti in HTML o PDF? Puoi usare docx4j per quello. (Disclosure: "my" project).

+0

se ho capito bene, docx4j può visualizzare i file doc xml tramite l'applet? – kant

+0

È possibile visualizzare il file Doc con la classe JRViewer di jasperreport? – kant

+0

L'applet docx4all utilizza docx4j per visualizzare/modificare il file docx – JasonPlutext

1

Si potrebbe dare un'occhiata allo Apache POI - Java API to Handle Microsoft Word Files che è in grado di leggere tutti i tipi di documenti di parole (formati OLE2 e OOXML, estensione .doc e .docx rispettivamente).

La lettura di un file doc può essere facile come:

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){} 
} 
} 

È possibile trovare maggiori a: HWPF Quick-Guide (in particolare HWPF unit tests)

Si noti che, secondo il sito POI:

HWPF è ancora in fase di sviluppo iniziale.

+0

Ho bisogno di scrivere file doc. 'POI' non è applicabile per questo. – kant

0

Suggerirei di guardare il codice sorgente di openoffice e implementarlo. Dovrebbe essere scritto in java.