¿Hay alguna biblioteca de Java (tal vez poi?) Que permite fusionar archivos docx? [cerrado]

StackOverflow https://stackoverflow.com/questions/2494549

  •  21-09-2019
  •  | 
  •  

Pregunta

Tengo que escribir una aplicación Java que puede combinar archivos docx. ¿Alguna sugerencia?

¿Fue útil?

Solución

Las siguientes API Java están disponibles para manejar documentos de MS Word OpenXML con Java:

Hubo uno más, pero no recuerdo el nombre más.

En cuanto a su requerimiento funcional: la fusión de dos documentos es técnicamente difícil de lograr el resultado que el usuario final podría esperar. La mayoría de la API no permitirán que eso. Tendrá que extraer la información deseada a partir de dos documentos y luego crear un nuevo documento basado en esta información usted mismo.

Otros consejos

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);
    }
}

Parece seguro como POI pueden trabajar con archivos docx. ¿Estás tratando de encontrar la manera de combinarlos?

Cómo extraer texto sin formato de un archivo DOCX usando el nuevo soporte OOXML en Apache POI 3.5?

Aspose API es el mejor hasta ahora para la fusión de archivos doc palabra o docx hasta ahora, pero que no es libre o de código abierto, si necesita una herramienta de código libre y abierto hay un par de API se puede elegir, se puede encontrar una revisión sobre ellos aquí,

http://www.esupu.com/open -fuente-oficina-document-java-api-review /

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top