Y at-il bibliothèque java (peut-être poi?) Qui permet de fusionner des fichiers docx? [fermé]

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

  •  21-09-2019
  •  | 
  •  

Question

Je dois écrire une application java qui peut fusionner des fichiers docx. Toutes les suggestions?

Était-ce utile?

La solution

Les API Java suivantes sont disponibles pour gérer les documents OpenXML MS Word avec Java:

Il y avait une plus, mais je ne me rappelle pas le nom plus.

En ce qui concerne votre exigence fonctionnelle: la fusion de deux documents est techniquement difficile à obtenir le résultat que l'utilisateur final s'attendrait. La plupart des API ne permettra pas à cela. Vous aurez besoin d'extraire les informations souhaitées à partir de deux documents, puis créez un nouveau document basé sur ces informations vous.

Autres conseils

Avec POI ma solution est:

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

Avec docx4j ma solution est:

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

Il semble que comme POI peut travailler avec des fichiers docx. Essayez-vous de comprendre comment les fusionner?

Comment extraire le texte brut à partir d'un fichier DOCX en utilisant le nouveau support OOXML dans Apache POI 3.5?

API Aspose est le meilleur jusqu'à présent pour la fusion mot doc ou docx jusqu'à présent, mais qui ne sont pas libres ou open source, si vous avez besoin d'un outils libres et open source, il y a deux API, vous pouvez choisir, vous pouvez trouver un examen sur eux ici,

http://www.esupu.com/open -source-office-document java-api-examen /

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top