2012-08-27 89 views
5

Tengo una aplicación web. He generado documentos de MS Word en formato xml (Documento XML de Word 2003) en el lado del servidor. Necesito mostrar este documento a un usuario del lado del cliente usando algún tipo de visor. Entonces, la pregunta es: ¿qué bibliotecas puedo usar para resolver este problema? Necesito una API para ver el documento de Word en el lado del cliente usando java.Visualización del archivo .doc con java applet

+0

Dado que el código del lado del servidor genera el informe, ¿por qué no generarlo como HTML y mostrarlo en una pestaña del navegador 'JEditorPane'? –

+0

porque la tarea es generar un informe de doc, que se puede abrir en ms word si es necesario. – kant

+0

Si el usuario desea abrirlo en MS Word, inserte la palabra doc directamente en el navegador con el tipo de contenido apropiado. (Tenga en cuenta que en este cuadro sería cargado por Open Office.) Si el usuario quiere obtener una vista previa primero, genere eso como HTML y muéstrelo en el navegador. –

Respuesta

4

No se puede mostrar de forma fiable un documento de Word en una página web utilizando Java (o cualquier otra tecnología simple para el caso). Existen varias bibliotecas comerciales para renderizar Word, pero no las encontrará como soluciones fáciles, baratas o confiables.

Lo que debe hacer es la siguiente:

(1) Abrir el motor de Word en el servidor utilizando un programa .NET (2) Convertir el documento de texto enriquecido utilizando el motor Palabra (3) Visualización el texto enriquecido, ya sea usando el widget RTF swing, o convertir a 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(); 

el principal riesgo de este enfoque es que el motor Palabra ya sea accidente o tiene una pérdida de memoria. Por esta razón, debe tener un mecanismo para reiniciarlo periódicamente y probarlo para asegurarse de que sea funcional y no acapara la memoria.

1

docx4all es un applet basado en Swing que hace Word 2007 XML (es decir, no Word 2003 XML), que escribimos hace varios años.

Obtenlo de svn.

Ese es un posible enfoque para la edición. Si todo lo que quieres es un visor, ¿qué no convertir a HTML o PDF? Puedes usar docx4j para eso. (Divulgación: "mi" proyecto).

+0

si te entiendo correctamente, docx4j puede ver archivos xml doc a través de applet? – kant

+0

¿Es posible ver el archivo Doc con la clase JRViewer de jasperreport? – kant

+0

El applet docx4all usa docx4j para ver/editar el archivo docx – JasonPlutext

1

Puede echar un vistazo a Apache POI - Java API to Handle Microsoft Word Files que es capaz de leer todo tipo de documentos de Word (formatos OLE2 y OOXML, extensiones .doc y .docx, respectivamente).

La lectura de un archivo doc puede ser fácil como:

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

Puede encontrar más información en: HWPF Quick-Guide (específicamente HWPF unit tests)

Tenga en cuenta que, de acuerdo con el sitio PDI:

HWPF todavía está en desarrollo temprano.

+0

Necesito escribir archivos de doc. 'POI' no es aplicable para eso. – kant

0

Sugiero que mire el código fuente de openoffice y lo implemente. Se supone que debe estar escrito en Java.

Cuestiones relacionadas