Java 合并具有不同页眉和页脚的2个docx

Java 合并具有不同页眉和页脚的2个docx,java,apache-poi,docx,Java,Apache Poi,Docx,我有2个(或更多)带有不同页眉和页脚的docx,我想合并它们,保留不同的页眉和页脚。我使用POI,我有合并2 docx的代码,问题是最终文件的第二部分(所以要合并的2 docx)没有任何页眉和页脚 public static void merge(InputStream src1, InputStream src2, OutputStream dest) throws Exception { OPCPackage src1Package = OPCPackage.open(src1);

我有2个(或更多)带有不同页眉和页脚的docx,我想合并它们,保留不同的页眉和页脚。我使用POI,我有合并2 docx的代码,问题是最终文件的第二部分(所以要合并的2 docx)没有任何页眉和页脚

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);
}
publicstaticvoidmerge(InputStream src1、InputStream src2、OutputStream dest)引发异常{
OPCPackage src1Package=OPCPackage.open(src1);
OPCPackage src2Package=OPCPackage.open(src2);
XWPFDocument src1Document=新XWPFDocument(src1Package);
CTBody src1Body=src1Document.getDocument().getBody();
XWPFDocument src2Document=新的XWPFDocument(src2Package);
CTBody src2Body=src2Document.getDocument().getBody();
附体(src1Body、src2Body);
src1文件写入(dest);
}
私有静态void appendBody(CTBody src,CTBody append)引发异常{
XmlOptions options外部=新的XmlOptions();
optionsOuter.setSaveOuter();
字符串appendString=append.xmlText(选项外部);
String srcString=src.xmlText();
字符串前缀=srcString.substring(0,srcString.indexOf(“>”)+1);

String mainPart=srcString.substring(srcString.indexOf(“>”)+1,srcString.lastIndexOf(“该问题中可能存在的解决方案的副本并不能解决我的问题。您的代码中似乎使用了内部方法
getDocument(…)
。您的方法
appendBody(…)
严重依赖字符串处理。它完全绕过了POI希望您处理文档元素(如
java.util.List
)的方式。我前面引用的解决方案确实说明了如何处理
java.util.List
。您可以将该方法扩展到处理
java.util.List
。好的,我尝试在e link但我有一个问题。如果一个文件包含图片,它们不会出现在最终文件中,只有一个空白框,其中有一条消息说word无法加载图片。为了管理不同的页眉和页脚,您必须实现节。节信息存储在默认节v的不同位置s、 其他部分。如果您有一个单独部分的两个文档,并且希望保留所有这些部分信息,则必须将除最后一个文档的部分信息之外的所有部分信息从默认部分转换为其他部分。