Necesito escribir una aplicación java que pueda combinar archivos docx. ¿Alguna sugerencia?¿Hay alguna biblioteca java (quizás poi?) Que permita fusionar archivos docx?
Respuesta
Las siguientes son las API de Java disponible para manejar documentos de MS Word OpenXML con Java:
Hubo uno más, pero ya no recuerdo el nombre.
En cuanto a su requisito funcional: fusionar dos documentos es técnicamente complicado para lograr el resultado que el usuario final esperaría. La mayoría de las API no permitirán eso. Necesitará extraer la información deseada de dos documentos y luego crear un documento nuevo basado en esta información usted mismo.
¿Cómo decides qué usar? Estoy entre Apache POI y OpenOffice.org. El segundo requeriría instalar una oficina abierta, que creo que sería un éxito en el rendimiento, ¿es cierto? – Roger
Para obtener más información sobre por qué es técnicamente complicado, consulte http://www.docx4java.org/blog/2010/11/merging-word-documents/ – JasonPlutext
. Supongo que la mejor manera de decidir cuál usar es probarlos con su documentos. Puede probar una herramienta comercial basada en docx4j, en http://webapp.docx4java.org/OnlineDemo/forms/upload_MergeDocx.xhtml – JasonPlutext
Parece que POI puede funcionar con archivos docx
. ¿Estás tratando de descubrir cómo fusionarlos?
How to extract plain text from a DOCX file using the new OOXML support in Apache POI 3.5?
Aspose API es la mejor hasta el momento para fusionar archivos word doc o docx hasta el momento, pero no es gratuito ni de código abierto, si necesita una herramienta gratuita y de código abierto hay un par de API que puede elegir, puede encontrar un comentario para ellos aquí,
http://www.esupu.com/open-source-office-document-java-api-review/
enlace roto .... – paul
Con PDI mi solución es:
public static void merge(InputStream src1, InputStream src2, OutputStream dest) throws Exception {
OPCPackage src1Package = OPCPackage.open(src1);
OPCPackage src2Package = OPCPackage.open(src2);
XWPFDocument src1Document = new XWPFDocument(src1Package);
CTBody src1Body = src1Document.getDocument().getBody();
XWPFDocument src2Document = new XWPFDocument(src2Package);
CTBody src2Body = src2Document.getDocument().getBody();
appendBody(src1Body, src2Body);
src1Document.write(dest);
}
private static void appendBody(CTBody src, CTBody append) throws Exception {
XmlOptions optionsOuter = new XmlOptions();
optionsOuter.setSaveOuter();
String appendString = append.xmlText(optionsOuter);
String srcString = src.xmlText();
String prefix = srcString.substring(0,srcString.indexOf(">")+1);
String mainPart = srcString.substring(srcString.indexOf(">")+1,srcString.lastIndexOf("<"));
String sufix = srcString.substring(srcString.lastIndexOf("<"));
String addPart = appendString.substring(appendString.indexOf(">") + 1, appendString.lastIndexOf("<"));
CTBody makeBody = CTBody.Factory.parse(prefix+mainPart+addPart+sufix);
src.set(makeBody);
}
Con docx4j mi solución es:
public class MergeDocx {
private static long chunk = 0;
private static final String CONTENT_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
public void mergeDocx(InputStream s1, InputStream s2, OutputStream os) throws Exception {
WordprocessingMLPackage target = WordprocessingMLPackage.load(s1);
insertDocx(target.getMainDocumentPart(), IOUtils.toByteArray(s2));
SaveToZipFile saver = new SaveToZipFile(target);
saver.save(os);
}
private static void insertDocx(MainDocumentPart main, byte[] bytes) throws Exception {
AlternativeFormatInputPart afiPart = new AlternativeFormatInputPart(new PartName("/part" + (chunk++) + ".docx"));
afiPart.setContentType(new ContentType(CONTENT_TYPE));
afiPart.setBinaryData(bytes);
Relationship altChunkRel = main.addTargetPart(afiPart);
CTAltChunk chunk = Context.getWmlObjectFactory().createCTAltChunk();
chunk.setId(altChunkRel.getId());
main.addObject(chunk);
}
}
gracias por esta respuesta, su código Poi funciona para mí, pero en mi caso también necesito unir archivos .doc así que tengo que usar el org.apache.poi.hwpf.HWPFDocument. Entonces, al seguir tu código docx, quiero obtener el formato xml del archivo .doc pero no encontré la manera de hacerlo. Cualquier idea será apreciada :) – AmiraGL
Esto funcionó perfectamente. ¡Gracias! –
@atott código de POI funcionó para mí, pero si anexar doc tiene imágenes, entonces después de que las imágenes de fusión no estén allí, descanse todo el texto fusionado con el formato exacto. –
- 1. ¿Hay alguna alternativa TTPickerTextField? quizás en iOS4?
- 2. Apache POI - Problema de salida de Docx
- 3. ¿Hay alguna API que me permita buscar por imagen?
- 4. ¿Hay alguna alternativa a Dictionary/SortedList que permita duplicados?
- 5. ¿Hay alguna biblioteca ActiveResource como para Java?
- 6. ¿Hay alguna alternativa al uso de Apache POI Java para Microsoft Office?
- 7. ¿Hay alguna utilidad de Unix que me permita grep múltiples archivos con poco tipeo?
- 8. ¿Hay una biblioteca Java para analizar los archivos PO gettext?
- 9. ¿Alguna biblioteca libre de VFS de Java?
- 10. Problemas que resuelven XSSFWorkbook - Java - POI .jar
- 11. ¿Hay alguna configuración en VS 2010 que le permita recuperar archivos abiertos después de que un archivo de proyecto cambie?
- 12. Cómo generar correctamente los atributos RSID en archivos .docx de Word utilizando Apache POI?
- 13. ¿Hay alguna biblioteca para analizar archivos de AutoCAD?
- 14. ¿Hay alguna biblioteca simple de Servidor FTP que sea incrustable?
- 15. ¿Hay alguna extensión de Visual Studio que permita ejecutar funciones como tareas?
- 16. ¿Hay algún complemento que permita cargar/usar dependencias no Maven?
- 17. cómo agregar una imagen a un documento .docx con Apache POI XWPF en java
- 18. ¿Cómo puedo usar formatos predefinidos en DOCX con POI?
- 19. Fusionar dos archivos XML en Java
- 20. ¿Hay alguna biblioteca C++ XSLT?
- 21. Guardar archivos Word DOCX como PDF
- 22. ¿Hay una biblioteca de Python que permita construir interfaces de usuario sin escribir mucho código?
- 23. ¿Cómo puedo crear un archivo docx simple con Apache POI?
- 24. ¿Hay una biblioteca Java para procesar archivos ONIX?
- 25. ¿Hay alguna biblioteca de Java para la generación de miniaturas?
- 26. biblioteca de Java para generar datos de TomTom GPS POI
- 27. ¿Hay alguna biblioteca de cliente php CalDav?
- 28. Bibliotecas para generar archivos docx (Open XML)
- 29. ¿Hay un depurador que me permita retroceder en el código?
- 30. ¿Convertir archivos TEX a PDF o DOCX?
Al "fusionar", ¿te refieres a algún tipo de concatenación simple? ¿O algo más elegante? ¿La dificultad es la parte de fusión o la parte docx (en lugar de doc)? –
Merge debería dar el mismo resultado que si abriéramos manualmente en el primer documento de MS Office, presione Ctrl + C, luego abra el segundo documento, vaya a su final y presione Ctrl + V. – Roman