有没有允许合并docx文件的java库(也许是poi?)?

我需要编写一个可以合并docx文件的java应用程序。 有什么建议么?

以下Java API可用于使用Java处理OpenXML MS Word文档:

  • Apache POI XWPF
  • OpenOffice.org API
  • OpenXML4J
  • Docx4J

还有一个,但我不记得这个名字了。

至于您的function需求:合并两个文档在技术上很难实现最终用户期望的结果。 大多数API都不允许这样做。 您需要从两个文档中提取所需信息,然后自己根据这些信息创建一个新文档。

有了POI我的解决方案是:

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

使用Docx4j,我的解决方案是:

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

看起来POI可以与docx文件一起使用。 你想弄清楚如何合并它们吗?

如何使用Apache POI 3.5中的新OOXML支持从DOCX文件中提取纯文本?

到目前为止Aspose API是迄今为止合并word doc或docx文件最好的,但这不是免费或开源的,如果你需要一个免费的开源工具,你可以选择几种API,你可以找到一个关于他们在这里,

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