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


Tengo una nueva aplicación en la que estaré trabajando donde tengo que generar un documento de Word que contenga tablas, gráficos, una tabla de contenido y texto. ¿Cuál es una buena API para usar para esto? ¿Qué tan seguro estás de que soporta gráficos, TDC y tablas? ¿Qué hay de oculto en usarlas?

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 solo llenar algunos espacios con tablas, gráficos, etc.

Editar: Varias buenas respuestas a continuación, cada una con sus propios defectos en cuanto a mi situación actual. 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 convencional, es demasiado inmaduro por lo que quiero.

Author: SPottuit, 2008-10-15

16 answers

En 2007 mi proyecto se utilizó con éxito OpenOffice.org ' s Universal Network Objects (UNO) interfaz para generar programáticamente 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 construir gráficos compatibles con MS-Office, hojas de cálculo, presentaciones, etc. Pudimos construir dinámicamente sofisticados documentos de Word, incluidos gráficos y tablas.

Nosotros simplificó el proceso mediante el uso de plantillas de documentos de MS-Word con inserciones de marcadores en los que el software insertó contenido, sin embargo, puede construir documentos completamente desde cero. El objetivo era que el software generara documentos de informes que pudieran ser compartidos y ajustados por los usuarios finales 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 OpenOffice Software Development Kit (SDK) está disponible que contiene aplicaciones de ejemplo y la Guía del Desarrollador de UNO.

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

Las cosas 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.).

Aquí hay algunos sitios web útiles:

 54
Author: Lucky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-13 06:43:18

Creo que Apache POI puede hacer el trabajo. Un posible problema dependiendo del uso que se pretenda hacer puede ser causado por el hecho de que HWPF está todavía en desarrollo temprano.

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

 30
Author: Jorge Ferreira,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-14 23:17:05

Podrías 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.

Eg.:

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 usar. Básicamente necesitarás 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 *

Saludos Leonardo

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

 9
Author: Leonardo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-20 11:08:34

Intente Aspose.Words for Java, se ejecuta en cualquier sistema operativo donde esté instalado Java.

Enviará el documento a DOC, DOCX o RTF si necesita un formato de salida de MS Word. Todos son apoyados igualmente bien.

Usando esta API puede crear un documento desde cero, literalmente a partir de nodos y establecer sus propiedades de formato. También puede usar un DocumentBuilder que proporciona métodos de nivel superior, como crear una fila de tabla, insertar un campo, etc. O puede copiar/unir / mover porciones entre documento pre creado existente, digamos que desea ensamblar un contrato, simplemente tome y copie piezas de varios documentos y Aspose.Las palabras fusionarán estilos, enumerarán el formato, etc. correctamente en el documento resultante.

Podrá insertar un campo TDC usando Aspose.Palabras, pero a partir de hoy, el campo TDC requerirá una actualización de 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á TOC completo como MS La palabra lo hace.

Estoy en la Aspose.Equipo de palabras.

 4
Author: romeok,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-21 21:59:55

Solo se mencionó brevemente una vez, así que me gustaría llamar a la biblioteca docx4j, ya que he tenido más éxito con docx4j que 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 debe 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 los usuarios de Word 2003 y anteriores necesitarán instale un paquete de compatibilidad.

 4
Author: Joshua Born,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-01 14:56:42

Intenta Aspose.Palabras para java.

Aspose.Words for 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 for Java soporta los formatos DOC, OOXML, RTF, HTML y OpenDocument. Con Aspose.Palabras puede generar, modificar y convertir documentos sin usar Microsoft Word.

 3
Author: Seki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-30 21:56:04

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

 2
Author: Gulzar Nazim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-14 23:17:21

He usado Aspose.Words para hacer mail merge en .NET. Creo que también tienen una versión Java.

 2
Author: tvanfosson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-14 23:26:46

Hay una herramienta llamada JODConverter que se conecta a open office para exponer sus convertidores de formato de archivo, hay versiones disponibles como una aplicación web (se encuentra en tomcat) en la que se publica y una herramienta de línea de comandos. He estado disparando html en él y convertir a .doc y pdf con éxito está en un proyecto bastante grande, aún no se ha puesto en marcha, pero creo que voy a usarlo. http://sourceforge.net/projects/jodconverter /

 2
Author: Andrew Hancox,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-09 19:11:34

IText es muy fácil de usar.

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

 2
Author: cam2574,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-04 16:06:20

Docx4j o poi, ambos de los cuales son ASL v2

@wondersofcomputing: iText es en realidad libre y de código abierto

 1
Author: JasonPlutext,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-27 02:52:58

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

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

Bill, el POI y la API de iText 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 you obtenga la ventaja de poder cambiar entre formatos (RTF y PDF) con cambios menores en el código. Si no recuerdo mal, el contenido se presenta utilizando las mismas llamadas y luego se establece como PDF o RTF utilizando unas pocas líneas de código.

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

Dado lo que dijiste que acerca de que HWPF no tiene suficiente funcionalidad para sus necesidades (solo he tratado con el lado de Excel del POI) su mejor apuesta puede ser convencer a los poderes que PDF es la mejor tecnología para el trabajo.

 1
Author: James McMahon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-04 16:24:20

He desarrollado archivos de word basados en XML puro en el pasado. Usé. NET, pero el lenguaje no debería importar ya que es realmente XML. No era 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 libro blanco de Microsoft que describe lo que hace cada etiqueta. Puede lograr todo lo que desee con las etiquetas de la misma manera que si estuviera utilizando Word (por supuesto, un poco más doloroso inicialmente.)

 1
Author: schmoopy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-04 12:13:44

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

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

 0
Author: billjamesdev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-15 01:21:08

Otra posibilidad, 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 causó que el navegador generara Word que importó el html muy bien, permitiendo ediciones y guardar como si hubiera generado un documento de Word real.

Las mesas funcionan bien, pero las imágenes que no había conseguido trabajar todavía. Puede ser tan fácil como una etiqueta en el HTML, o puede que tenga que transmitir una parte separada de la respuesta que contiene los datos de la imagen en binario, o algún otro método que no he llegado con todavía. :)

 0
Author: billjamesdev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-15 22:20:31

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

 0
Author: Paul Jowett,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-16 03:40:21