Y at-il bibliothèque java (peut-être poi?) Qui permet de fusionner des fichiers docx? [fermé]
Question
Je dois écrire une application java qui peut fusionner des fichiers docx. Toutes les suggestions?
La solution
Les API Java suivantes sont disponibles pour gérer les documents OpenXML MS Word avec Java:
- Apache POI XWPF
- OpenOffice.org API
- OpenXML4J
- docx4j
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?
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 /