¿Existe una API de Java que pueda crear documentos de Word enriquecidos? [cerrado]


111

Tengo una nueva aplicación en la que trabajaré en la que tengo que generar un documento de Word que contiene tablas, gráficos, una tabla de contenido y texto. ¿Cuál es una buena API para usar para esto? ¿Qué tan seguro está de que admite gráficos, ToC y tablas? ¿Cuáles son algunos trucos ocultos al usarlos?

Algunas aclaraciones:

  • No puedo generar un PDF, quieren un documento de Word.
  • Están usando MS Word 2003 (o 2007), no OpenOffice
  • La aplicación se está ejecutando en * nix app-server

Sería bueno si pudiera comenzar con un documento de plantilla y simplemente completar algunos espacios con tablas, gráficos, etc.

Editar: Varias buenas respuestas a continuación, cada una con sus propias fallas en cuanto a mi situación actual. Es difícil elegir una "respuesta final" de ellos. Creo que lo dejaré abierto y espero que se creen mejores soluciones.

Editar: El proyecto OpenOffice UNO parece estar más cerca de lo que pedí. Si bien el PDI es ciertamente más común, es demasiado inmaduro para lo que quiero.


26
No estoy seguro de cómo cerrar esta pregunta 30 meses después de su última edición y más de 3 años después de que se preguntó originalmente va a ser muy productivo. Si cambié el título a "¿Cómo creo documentos de Word enriquecidos con una API de Java?" eso arreglaría esto?
billjamesdev

1
en caso de que alguien necesite una revisión completa de la API de Java disponible esupu.com/open-source-office-document-java-api-review
Supun Sameera

Puede echar un vistazo a docxtemplater, https://github.com/edi9999/docxtemplater/ que es una biblioteca que creé para generar docx a partir de plantillas docx
edi9999

1
La pregunta debería reabrirse. La pregunta ha sido redactada nuevamente para ajustarse a las reglas, por lo tanto, me gustaría llamar a quien tenga el poder para reabrir esta pregunta. Antes la pregunta era: ¿Qué es una buena API de Java para crear documentos de Word? Ahora la pregunta es: ¿Existe una API de Java que pueda crear documentos de Word enriquecidos? La pregunta ahora apunta claramente a lo que quiere la persona que pregunta: crear documentos de Word con gráficos, ToC y tablas. La pregunta ya no pide una "buena" API de Java. Lo bueno es diferente para todos.
Sjoerd Pottuit

Respuestas:


56

En 2007, mi proyecto utilizó con éxito la interfaz Universal Network Objects (UNO) de OpenOffice.org para generar mediante programación documentos compatibles con MS-Word (* .doc), así como los documentos PDF correspondientes, desde una aplicación web Java (un marco Struts / JSP).

OpenOffice UNO también le permite crear gráficos, hojas de cálculo, presentaciones, etc. compatibles con MS-Office. Pudimos crear de forma dinámica documentos de Word sofisticados, incluidos gráficos y tablas.

Simplificamos el proceso utilizando plantillas de documentos de MS-Word con inserciones de marcadores en las que el software inserta contenido; sin embargo, puede crear documentos completamente desde cero. El objetivo era que el software generara documentos de informes que los usuarios finales pudieran compartir y modificar aún más antes de convertirlos a PDF para su entrega final y archivo.

Opcionalmente, puede producir documentos en formatos OpenOffice si desea que los usuarios utilicen OpenOffice en lugar de MS-Office. En nuestro caso, los usuarios quieren utilizar herramientas de MS-Office.

UNO está incluido dentro de la suite OpenOffice. Simplemente vinculamos nuestra aplicación Java a bibliotecas relacionadas con UNO dentro de la suite. Un kit de desarrollo de software OpenOffice (SDK) está disponible con aplicaciones de ejemplo y guía de la ONU del desarrollador.

No he investigado si el último OpenOffice UNO puede generar formatos de documentos XML abiertos de MS-Office 2007.

Los aspectos importantes de OpenOffice UNO son:

  1. Es freeware
  2. Es compatible con varios lenguajes (por ejemplo, Visual Basic, Java, C ++ y otros).
  3. Es independiente de la plataforma (Windows, Linux, Unix, etc.).

Estos son algunos sitios web útiles:


1
Hasta ahora, este es el más compatible con el conjunto de herramientas que pedí. Voy a marcarlo como "aceptado". Aunque reconozco completamente que POI es más común, simplemente no tiene la funcionalidad que quiero todavía.
billjamesdev

30

Creo que Apache POI puede hacer el trabajo. Un posible problema que depende del uso al que apuntes puede ser causado por el hecho de que HWPF aún se encuentra en desarrollo temprano.

HWPF es el conjunto de API para leer y escribir documentos de Microsoft Word 97 (-XP) utilizando (solo) Java.


¿Algún conocimiento de las posibilidades de gráficos y tablas? ¿Qué hay de las tablas de contenido? ¿Alguien tiene experiencia real haciendo esas cosas en POI?
billjamesdev

1
Mirando la documentación para POI, parece que este HWPF está muy temprano en desarrollo, permitiendo principalmente leer texto de un .doc, no realmente para la creación dinámica de documentos "complejos".
billjamesdev

No creo que maneje los gráficos / tablas más complejos, etc.
Brian Agnew


9

Puede usar esto: http://code.google.com/p/java2word

Implementé esta API llamada Java2Word. con unas pocas líneas de código, puede generar un documento de Microsoft Word.

P.ej.:

IDocument myDoc = new Document2004();
myDoc.getBody().addEle(new Heading1("Heading01"));
myDoc.getBody().addEle(new Paragraph("This is a paragraph...")

Hay algunos ejemplos de cómo utilizar. Básicamente necesitará un archivo jar. Avísame si necesitas más información sobre cómo configurarlo.

* Escribí esto porque teníamos una necesidad real en un proyecto. Más en mi blog:

http: //leonardo-pinho.blogspot.com/2010/07/java2word-word-document-generator-from.html *

salud Leonardo

Editar : Proyecto en enlace movido a https://github.com/leonardoanalista/java2word


1
¿Lo ha probado con MS Word real? Me las arreglé para crear archivos que OpenOffice y LibreOffice pueden leer pero no MSWord en Windows. (He informado de este problema en code.google.com/p/java2word/issues/detail?id=16 )
Stein G. Strindhaug

2
¿No puedo abrir archivos generados por java2word usando OpenOffice? Funciona bien con Office 2010
Ashika Umanga Umagiliya

¿Es compatible con la creación de archivos .docx? @Leonardo
MaheshVarma


4

Pruebe Aspose.Words para Java, se ejecuta en cualquier sistema operativo donde esté instalado Java.

Generará el documento en formato DOC, DOCX o RTF si necesita un formato de salida de MS Word. Todos reciben el mismo apoyo.

Con esta API, puede crear un documento desde cero, literalmente desde nodos y establecer sus propiedades de formato. También puede utilizar un DocumentBuilder que proporciona métodos de nivel superior, como crear una fila de tabla, insertar un campo, etc. O puede copiar / unir / mover partes entre un documento creado previamente existente, digamos que desea armar un contrato, simplemente tome y copie piezas de varios documentos y Aspose.Words fusionará estilos, formato de lista, etc. correctamente en el documento resultante.

Podrá insertar un campo TOC usando Aspose.Words, pero a partir de hoy, el campo TOC requerirá una actualización del campo cuando el documento se abra en Microsoft Word. Sin embargo, vamos a lanzar soporte completo para los campos TOC a principios de 2010. Por ejemplo, construirá un TOC completo como lo hace MS Word.

Estoy en el equipo de Aspose.Words.


4

Se mencionó solo brevemente una vez, por lo que me gustaría mencionar la biblioteca docx4j, ya que he tenido más éxito con docx4j que con cualquier otra cosa. El soporte de Apache POI para documentos de Word no es muy bueno. Además, a diferencia de Aspose.Words, docx4j es una biblioteca de código abierto.

El único inconveniente es que con docx4j tienes que crear documentos en formato Office Open XML (docx) en lugar de documentos en formato OLE2 (doc). Este es el formato predeterminado para Word 2007, pero Word 2003 y los usuarios anteriores deberán instalar un paquete de compatibilidad.


3

Pruebe Aspose.Words para java.

Aspose.Words para Java es una biblioteca de clases avanzada (comercial) para Java que le permite realizar una gran variedad de tareas de procesamiento de documentos directamente dentro de sus aplicaciones Java.

Aspose.Words para Java es compatible con los formatos DOC, OOXML, RTF, HTML y OpenDocument. Con Aspose.Words puede generar, modificar y convertir documentos sin usar Microsoft Word.


2

Puede utilizar un puente COM de Java como JACOB . Si es del lado del cliente, otra opción sería usar Javascript.


Gracias, pero parece que esto requeriría ejecutarse en una máquina con Windows, ¿no? Aclaré el sistema operativo de la máquina host después de leer esto, pero gracias por la información.
billjamesdev

El uso de JACOB en la máquina del servidor web requeriría la instalación de Microsoft Word, ya que la creación y manipulación de documentos de Word a través de la interfaz COM requiere que aparezcan instancias reales de la aplicación Word. En general, dicho uso de Word + COM en un servidor multiusuario es bastante problemático porque Word no está diseñado para tal uso; por ejemplo, la duplicación de partes del documento se realiza tradicionalmente utilizando el objeto Selection y el portapapeles de Windows, lo cual es impensable en la web. configuración de la máquina del servidor. Esto me ha quemado bastante (aunque he encontrado algunos ajustes)
hello_earth


2

Hay una herramienta llamada JODConverter que se conecta a la oficina abierta para exponer sus convertidores de formato de archivo, hay versiones disponibles como una aplicación web (se encuentra en Tomcat) en la que publicas y una herramienta de línea de comandos. Lo he estado disparando en html y convirtiéndolo a .doc y pdf con éxito, es un proyecto bastante grande, aún no se ha lanzado, pero creo que lo voy a usar. http://sourceforge.net/projects/jodconverter/


2

iText es realmente fácil de usar.

Si necesita archivos doc, puede llamar a abiword (procesador de texto multi-os lightweigh gratuito) desde la línea de comandos, tiene varias opciones de conversión de formato de conversión.



1

Después de investigar un poco más, encontré iText, una API de creación de archivos PDF y RTF. Creo que puedo usar la generación RTF para crear un archivo legible en Doc que luego se puede editar con Doc y volver a guardar.

¿Alguien tiene alguna experiencia con iText, usado de esta manera?

Bill, POI e iText API son muy similares desde una perspectiva de programación. He trabajado con ambos en el pasado y los encontré fáciles de usar y bien documentados.

Con iText, obtiene la ventaja de poder cambiar entre formatos (RTF y PDF) con pequeños cambios en el código. Si mal no recuerdo, el contenido se presenta usando las mismas llamadas y luego se configura como PDF o RTF usando algunas líneas de código.

Sin embargo, creo que el formato en RTF es limitado en comparación con DOC. No sé si podrá implementar las funciones avanzadas que está buscando (tablas, imágenes en línea) sin una cantidad decente de molestias, en todo caso.

Dado lo que dijo acerca de que HWPF no tiene suficiente funcionalidad para sus necesidades (solo me he ocupado del lado de Excel de POI), su mejor opción puede ser convencer a los poderes fácticos de que PDF es la mejor tecnología para el trabajo .


1

He desarrollado archivos de palabras basados ​​en XML puro en el pasado. Usé .NET, pero el idioma no debería importar ya que es realmente XML. No fue lo más fácil de hacer (tenía un proyecto que lo requería hace un par de años). Estos solo funcionan en Word 2007 o superior, pero todo lo que necesita es el documento técnico de Microsoft que describe lo que hace cada etiqueta. Puede lograr todo lo que quiera con las etiquetas de la misma manera que si estuviera usando Word (por supuesto, un poco más doloroso al principio).


0

Después de investigar un poco más, encontré iText , una API de creación de archivos PDF y RTF. Creo que puedo usar la generación RTF para crear un archivo legible en Doc que luego se puede editar con Doc y volver a guardar.

¿Alguien tiene alguna experiencia con iText, usado de esta manera?


He usado iText para exportar a RTF y es un poco inestable: TOC, por ejemplo, no funciona tan bien y realmente no es muy fácil de usar (faltan documentos)
AlfaTeK

0

Otra posibilidad más, ya que se trata de una aplicación web.

Pude renderizar una página HTML con el tipo MIME establecido en "application / msword", lo que provocó que el navegador generara Word, que importaba el html sin problemas, lo que permitía editar y guardar como si tuviera un documento Word real.

Las tablas funcionan bien, pero las imágenes aún no funcionaban. Puede ser tan fácil como una etiqueta en el HTML, o puede que tenga que transmitir una parte separada de la respuesta que contenga los datos de la imagen en binario, o algún otro método que no se me haya ocurrido todavía. :)


0

Aunque esto es mucho más tarde que la solicitud, podría ayudar a otros. Docmosis proporciona una API de Java para crear documentos en formato doc, pdf, odt utilizando documentos como plantillas. Utiliza OpenOffice como motor para realizar las conversiones de formato. Docmosis realiza la manipulación y la población de documentos.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.