Apache POI 5.2.2 版本 - 复制Word文档内容和书签
使用 Apache POI 5.2.2 版本复制 Word 文档的内容和书签内容到另一个 Word 文档。
以下代码示例展示了如何使用 Apache POI 5.2.2 版本将两个 Word 文档的内容和指定书签的内容合并到一个新的 Word 文档中。
package word;
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSimpleField;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.List;
public class Word {
public static void main(String[] args) {
try {
// 打开输入文档1
XWPFDocument inputDoc1 = new XWPFDocument(new FileInputStream('input01.docx'));
// 打开输入文档2
XWPFDocument inputDoc2 = new XWPFDocument(new FileInputStream('input02.docx'));
// 创建输出文档
XWPFDocument outputDoc = new XWPFDocument();
// 复制输入文档1的内容到输出文档
copyDocumentContent(inputDoc1, outputDoc);
// 复制输入文档1中指定书签的内容到输出文档
copyBookmarkContent('应变计', inputDoc1, outputDoc);
// 复制输入文档2中指定书签的内容到输出文档
copyBookmarkContent('位移计', inputDoc2, outputDoc);
// 保存输出文档
FileOutputStream out = new FileOutputStream('input04.docx');
outputDoc.write(out);
out.close();
System.out.println('复制完成');
} catch (Exception e) {
e.printStackTrace();
}
}
// 复制文档内容
private static void copyDocumentContent(XWPFDocument sourceDoc, XWPFDocument targetDoc) {
for (IBodyElement element : sourceDoc.getBodyElements()) {
if (element instanceof XWPFParagraph paragraph) {
targetDoc.createParagraph().createRun().setText(paragraph.getText());
} else if (element instanceof XWPFTable table) {
targetDoc.createTable().getCTTbl().setTblPr(table.getCTTbl().getTblPr());
}
}
}
// 复制书签内容
private static void copyBookmarkContent(String bookmarkName, XWPFDocument sourceDoc, XWPFDocument targetDoc) {
for (XWPFParagraph paragraph : sourceDoc.getParagraphs()) {
for (XWPFRun run : paragraph.getRuns()) {
List<CTSimpleField> fields = run.getCTR().getFldSimpleListList();
for (CTSimpleField field : fields) {
if (field.getInstr().contains(' FORMTEXT ')) {
String fieldValue = field.getInstr().split(''')[1];
if (fieldValue.equals(bookmarkName)) {
targetDoc.createParagraph().createRun().setText(paragraph.getText());
break;
}
}
}
}
}
}
}
解决办法
内容:要解决此问题,您需要确保您使用的是Apache POI 5.2.2版本。您可以从Apache POI的官方网站(https://poi.apache.org/)下载最新版本的POI库。
在您的项目中,将旧版本的POI库替换为新版本。确保在您的构建路径中引用了新版本的POI库。
然后重新编译和运行您的代码,应该能够成功复制Word文档的内容和书签内容到输出文档中。
其他说明
- 请注意,代码中的 'input01.docx'、'input02.docx' 和 'input04.docx' 是示例文件名,您需要根据实际情况进行修改。
- 在代码中,我们使用
field.getInstr().split(''')[1]来获取书签名称。请确保您的书签名称不包含双引号。 - 如果您的 Word 文档包含其他复杂元素,例如图表或图片,您可能需要根据您的需求修改代码。
- 在复制书签内容时,代码仅复制包含书签名称的段落内容。如果您需要复制其他内容,例如表格或列表,您需要修改代码逻辑。
通过使用 Apache POI 5.2.2 版本和上述代码示例,您应该能够成功地复制 Word 文档的内容和书签内容到另一个 Word 文档中。
原文地址: https://www.cveoy.top/t/topic/fKK3 著作权归作者所有。请勿转载和采集!