Apache POI 5.2.2 版本 Word 文档书签复制示例
Apache POI 5.2.2 版本 Word 文档书签复制示例
本示例演示了如何使用 Apache POI 5.2.2 版本从多个 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().getFldSimpleList();
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 版本或更高版本。
input01.docx,input02.docx和input04.docx是示例文件名,请根据实际情况修改。- 书签名称
应变计和位移计也需要根据实际情况修改。
代码说明:
- 使用
XWPFDocument类打开 Word 文档。 - 使用
copyDocumentContent方法复制文档内容。 - 使用
copyBookmarkContent方法复制书签内容。- 使用
getFldSimpleList方法获取书签信息。 - 检查书签名称是否与指定名称匹配。
- 如果匹配,则将该书签对应的段落内容复制到目标文档。
- 使用
- 保存输出文档。
使用说明:
- 将代码保存为
Word.java文件。 - 编译并运行代码。
- 代码会将
input01.docx和input02.docx中的指定书签内容复制到input04.docx文件中。
希望本示例对您有所帮助!
原文地址: https://www.cveoy.top/t/topic/fKLl 著作权归作者所有。请勿转载和采集!