【发布时间】:2020-08-07 14:02:59
【问题描述】:
我的目标是将一个 docx(保持样式/格式)插入另一个 docx 的特定行。在第二个 docx 中有一个词,“占位符”,首先,我必须找到这个词,然后将其更改为第一个 docx 文本,保留插入的 docx 样式和格式。
我有个主意。也许我应该创建一个新的 docx,将第二个 docx 与“占位符”分开,将第一部分放入新的 docx,然后放入整个 docx,然后放入第二个 docx 的第二部分。但是我怎样才能保持样式和格式呢?我没有图像/平板电脑或任何东西,只有文本和格式的东西,如列表、标签、文本样式等。
目前我正在使用 apache POI 和 java。 (我尝试了 docx4j,但成功率较低) 示例代码进行了简单的合并,仅此而已。我怎样才能找到“占位符”这个词并在那里插入我的 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 suffix = srcString.substring(srcString.lastIndexOf("<"));
String addPart = appendString.substring(appendString.indexOf(">") + 1, appendString.lastIndexOf("<"));
CTBody makeBody = CTBody.Factory.parse(prefix + mainPart + addPart + suffix);
src.set(makeBody);
}
【问题讨论】:
标签: java apache-poi docx docx4j