mandar - crear documentos word desde java
¿Qué es una buena API de Java para crear documentos de Word? (16)
Tengo una nueva aplicación en la que trabajaré donde tengo que generar un documento de Word que contenga tablas, gráficos, una tabla de contenido y texto. ¿Qué es una buena API para usar para esto? ¿Qué tan seguro está de que es compatible con gráficos, CdC y tablas? ¿Cuáles son algunos errores ocultos al usarlos?
Algunas aclaraciones:
- No puedo enviar un PDF, quieren un documento de Word.
- Están usando MS Word 2003 (o 2007), no OpenOffice
- La aplicación se ejecuta en * nix app-server
Sería bueno si pudiera comenzar con un documento de plantilla y simplemente rellenar 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 ser el más cercano a lo que pedí. Si bien el POI es ciertamente más convencional, es demasiado inmaduro para lo que quiero.
Después de investigar un poco más, me encontré con iText, una API de creación de archivos PDF y RTF. Creo que puedo usar la generación de RTF para crear un archivo legible por Doc que luego se puede editar usando Doc y volver a guardar.
¿Alguien tiene alguna experiencia con iText, utilizada 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 usted gana la ventaja de poder cambiar de formato (RTF y PDF) con un pequeño cambio en el código. Si recuerdo correctamente, el contenido se presenta utilizando las mismas llamadas y luego se configura como PDF o RTF usando unas pocas 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 características avanzadas que está buscando (tablas, imágenes en línea) sin una cantidad decente de molestias, si es que lo hace.
Dado lo que dijo acerca de que HWPF no tiene suficiente funcionalidad para sus necesidades (solo me he ocupado del lado Excel de POI) su mejor opción puede ser convencer a los poderes que el PDF es la mejor tecnología para el trabajo .
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. La manipulación del documento y la población se lleva a cabo por Docmosis en sí.
Creo que Apache POI puede hacer el trabajo. Un posible problema según el uso que se le dé a su objetivo 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.
Desarrollé archivos puros basados en XML en el pasado. Usé .NET, pero el lenguaje no debería importar ya que es verdaderamente 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 inicialmente).
Después de investigar un poco más, me encontré con iText , una API de creación de archivos PDF y RTF. Creo que puedo usar la generación de RTF para crear un archivo legible por Doc que luego se puede editar usando Doc y volver a guardar.
¿Alguien tiene alguna experiencia con iText, utilizada de esta manera?
En 2007, mi proyecto utilizó con éxito la interfaz de Universal Network Objects (UNO) de OpenOffice.org para generar programáticamente documentos compatibles con MS-Word (* .doc), así como documentos PDF correspondientes, desde una aplicación web Java (un framework Struts / JSP).
OpenOffice UNO también le permite crear diagramas, hojas de cálculo, presentaciones, etc. compatibles con MS-Office. Pudimos construir dinámicamente documentos sofisticados de Word, incluidos gráficos y tablas.
Simplificamos el proceso mediante el uso de plantillas de documentos MS-Word con insertos de marcadores en los que el software insertó contenido, sin embargo, puede crear documentos completamente desde cero. El objetivo era que el software generara documentos de informe 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 de OpenOffice si desea que los usuarios usen OpenOffice en lugar de MS-Office. En nuestro caso, los usuarios desean utilizar las herramientas de MS-Office.
UNO está incluido dentro del paquete de OpenOffice. Simplemente vinculamos nuestra aplicación Java a las bibliotecas relacionadas con UNO dentro de la suite. Se encuentra disponible un Kit de desarrollo de software (SDK) de OpenOffice que contiene aplicaciones de ejemplo y la Guía del desarrollador de UNO.
No he investigado si la última versión de OpenOffice UNO puede generar formatos de documentos XML abiertos de MS-Office 2007.
Las cosas importantes sobre OpenOffice UNO son:
- Es freeware
- Es compatible con varios idiomas (por ejemplo, Visual Basic, Java, C ++ y otros).
- Es independiente de la plataforma (Windows, Linux, Unix, etc.).
Aquí hay algunos sitios web útiles:
- Casa abierta de la oficina
- Guía del desarrollador de Open Office UNO
- Foro de desarrolladores de OpenOffice (especialmente los foros "Macros y API" y "Fragmentos de código").
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 se publica y una herramienta de línea de comandos. He estado lanzando html y convirtiéndolo a .doc y pdf con éxito, está en un proyecto bastante grande, todavía no se ha publicado, pero creo que lo voy a usar. http://sourceforge.net/projects/jodconverter/
He usado Aspose.Words para hacer una fusión de correo en .NET. Creo que también tienen una versión de Java.
Otra posibilidad más, ya que esta es una aplicación web.
Pude renderizar una página HTML con el tipo MIME configurado en "application / msword", lo que provocó que el navegador engendrara Word que importó el html muy bien, lo que permite editarlo y guardarlo como si fuera un Word doc real.
Las tablas funcionan bien, pero las imágenes no las he conseguido aún. Puede ser tan fácil como solo una etiqueta en el HTML, o puede que tenga que transmitir una parte separada de la respuesta que contiene los datos de imagen en formato binario, o algún otro método que aún no haya encontrado. :)
Pruebe Aspose.Words para Java.
Aspose.Words for Java es una biblioteca de clases (comercial) avanzada 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 admite formatos DOC, OOXML, RTF, HTML y OpenDocument. Con Aspose.Words puede generar, modificar y convertir documentos sin usar Microsoft Word.
Pruebe Aspose.Words para Java, se ejecuta en cualquier sistema operativo donde esté instalado Java.
Saldrá el documento a DOC, DOCX o RTF si necesita un formato de salida de MS Word. Todos son compatibles igualmente bien.
Usando esta API puedes crear un documento desde cero, literalmente desde nodos y establecer sus propiedades de formateo. También puede usar un DocumentBuilder que proporcione métodos de mayor nivel, como crear una fila de tabla, insertar un campo, etc. O puede copiar / unir / mover porciones entre un documento precreado existente, digamos que desea armar un contrato, simplemente tome y copie piezas de varios documentos y Aspose.Words combinará los estilos, el formato de la lista, etc. correctamente en el documento resultante.
Podrá insertar un campo TOC utilizando Aspose.Words, pero a partir de hoy, el campo TOC requerirá una actualización de campo cuando se abra el documento en Microsoft Word. Sin embargo, vamos a lanzar un soporte completo para los campos de TOC a principios de 2010. Por ejemplo, construirá TOC completo como MS Word lo hace.
Estoy en el equipo de Aspose.Words.
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 usarlo. Básicamente necesitarás un archivo jar. Avíseme si necesita 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 *
aclama Leonardo
Puede usar un puente COM de Java como JACOB . Si es del lado del cliente, otra opción sería usar Javascript.
Se mencionó solo una breve vez, por lo 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 POI de Apache 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 tiene que crear documentos de formato Office Open XML (docx) en lugar de documentos de formato basados en OLE2 (doc). Este es el formato predeterminado para Word 2007, pero Word 2003 y los usuarios anteriores necesitarán instalar un paquete de compatibilidad.
docx4j o poi, ambos son ASL v2
@wondersofcomputing: iText es en realidad libre y de código abierto
iText es realmente fácil de usar.
Si necesita archivos doc, puede llamar a abiword (procesador de texto multi-os lightweigh libre) desde la línea de comandos, tiene varias opciones de conversión de formato de conversión.