2010-01-02 27 views
7

Me gustaría crear un documento de Word utilizando una plantilla, reemplazar algunas variables (campos) y guardarlo como un nuevo documento de Word.API de creación de documentos de Word en Java

Estaba pensando en usar Apache POI, http://poi.apache.org/ ¿es el mejor para este propósito? ¿puedes compartir tu impresión con él?

+4

Compruebe aquí: http://stackoverflow.com/questions/203174/whats-a-good-java-api-for-creating-word-documents – JCasso

Respuesta

8

He trabajado anteriormente con puntos de interés y desde luego puedo generar documentos de Word. Pero el diablo está en los detalles.

Word tiene miles de funciones: puede poner listas numeradas comenzando en el n. ° 13 con sangrías negativas en dos celdas unidas de una tabla incluida en otra tabla que es parte de una lista de viñetas ... ya se entiende. Cuando la documentación del POI dice que son un trabajo en progreso, refleja lo que probablemente será un estado eterno de tratar de ponerse al día con la especificación (indocumentada) de Word.

Los documentos con un conjunto razonablemente "normal" de funciones utilizadas son bien compatibles con POI, cuyas interfaces y métodos son razonables y consistentes, pero a veces requieren un poco de trabajo. Pero, como dice Pascal, los documentos con un conjunto de características no demasiado exorbitantes también son compatibles con RTF. Casi no tengo experiencia en "hacer" RTF pero es probablemente un poco más simple que trabajar con POI.

Si está trabajando en un entorno o para un cliente que insiste en que sus documentos producidos sean .DOC en lugar de , entonces POI es prácticamente su única opción, a menos que pueda introducir un paso donde utilice un poco de Office automatización para convertir RTF en DOC.

Actualización: Mientras tanto, tuve algunas ideas más.

Usar POI o crear documentos RTF es algo que podría hacer en prácticamente cualquier plataforma. En mi trabajo, todos los servidores que hacen un procesamiento como este están ejecutando Linux, por ejemplo.

Sin embargo, en el caso probable de que sus programas se ejecutarán en Windows, no hay otra alternativa: Jacobhttp://www.land-of-kain.de/docs/jacob/

Jacob es una interfaz COM para Java; esencialmente le permite "controlar a distancia" programas de Windows como Word y Excel. El documento al que he vinculado anteriormente no es para el sitio de Jacob, sino para una sola página con recetas de "cookie cutter" para usar a Jacob. El proyecto en sí está en SourceForge: http://sourceforge.net/projects/jacob-project/ Pero las personas afirman, y con razón, que la documentación es un poco insuficiente.

Jacob tiene la ventaja sobre todas las demás soluciones que está tratando con la palabra "real" y por lo tanto todas las capacidades de Word están disponibles para usted. Esta sería una alternativa si hay aspectos de detalle de su documento que simplemente no pueden manejarse con POI o mediante el formato RTF.

2

No estoy seguro del estado exacto del soporte de documentos de Word en POI pero, según el sitio web de POI, el trabajo todavía está en curso (no puedo decir exactamente qué significa esto). Entonces, en este momento, no usaría POI, sino que intentaré generar un documento RTF. Para esto, se podía:

  • Uso RTFTemplate que es un motor de RTF a RTF que puede generar documento RTF como resultado de la fusión de un modelo RTF y datos.
  • Utilice iText que es principalmente un generador de PDF pero también puede generate RTF.
  • Crea tu propia solución personalizada (pero yo no haría eso).

I'd go for iText.

3

Si utiliza una plantilla y no desea crear la palabra documento desde cero, por lo que sé, POI es una solución bastante buena. Abre la plantilla y selecciona las zonas que desea reemplazar.

Dicen que POI aún está en desarrollo, pero lo he estado usando en entornos de producción y funciona bastante bien en este momento.

+0

Es bueno saberlo. Gracias. –

+0

El problema que tengo es: mi plantilla de palabras ** tiene un encabezado que debe editarse **. Y hasta donde sé, POI no me permite editar el encabezado. –

+0

@Valentin Rocher, no tuvo problemas con este método, como que esto no funciona todo el tiempo – fatiDev

1

Debe buscar en los componentes de Aspose.Words. Recientemente han comenzado a proporcionar una versión de Java del componente.

Véase el siguiente enlace: Aspose.Word for Java

Esto apoya la automatización de textos, la creación y las características avanzadas tales como la fusión de correo sin la necesidad de una instancia de Microsoft Word en la máquina. Los beneficios reales son que puede trabajar dentro del contexto de un documento de Word real y no tener que comprometerse mediante la creación de RTF, etc.

La versión de Java no está actualmente tan completa como la versión de .Net pero el núcleo principal la funcionalidad está ahí y están presionando mucho para tener pronto una función equivalente.

Además, si compra la versión de Java, obtiene años de actualizaciones/asistencia gratuitas a medida que se crean las nuevas versiones.

1

Si está trabajando con documentos docx, docx4j es una opción. Como POI, su fuente abierta.

2

Sé que esta pregunta es un poco viejo, pero yo creo que mucha gente todavía encuentra presente en los buscadores, por lo que he puesto otra posibilidad de hacer lo que quiera aquí:

Si el único objetivo es tener una plantilla de Word y reemplazar algunos valores, puede considerar guardar una plantilla de Word como solo xml (no docx) y luego procesarla con Java simple y sin ningún Framework. Si desea hacer más (por ejemplo, crear listas o tablas), también podría considerar comprender el formato xml y escribir sus propios ayudantes antes de cargar un Framework como POI.

Aquí es un ejemplo de cómo hacerlo: http://dev-notes.com/code.php?q=10

Ésta es la versión rápida, si quieres una versión agradable, se podría tratar de usar un procesador XML.

PD: los usuarios pueden notar que la extensión de archivo no es doc sino xml y pueden culparte por eso, pero está bien ... simplemente cámbiele el nombre a doc, la palabra reconocerá el formato y todos estarán contentos de nuevo;)

4

Esto obviamente es demasiado tarde, pero desde 2013 hay una solución mucho mejor y más flexible para la creación de documentos de Word.

http://www.docx4java.org/trac/docx4j

he tenido mucha más suerte con docx4j que he hecho con la PDI.

Cuestiones relacionadas