Java Apache POI替换Word书签内容:从input01.docx复制到input03.docx
使用Java和Apache POI替换Word书签内容
本示例演示如何使用Java和Apache POI库将一个Word文档(input01.docx)中的书签内容替换为另一个Word文档(input03.docx)中的书签内容,并将结果保存到新文件(input04.docx)。
**代码示例:**javaimport org.apache.poi.xwpf.usermodel.*;
import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;
public class ReplaceBookmarkContent { public static void main(String[] args) { String input01FilePath = 'input01.docx'; String input03FilePath = 'input03.docx'; String outputFilePath = 'input04.docx';
try { // 加载输入文件 XWPFDocument input01Doc = new XWPFDocument(new FileInputStream(input01FilePath)); XWPFDocument input03Doc = new XWPFDocument(new FileInputStream(input03FilePath));
// 获取书签内容 String bookmarkContent = getBookmarkContent(input03Doc, 'bookmarkName');
// 替换书签内容 replaceBookmarkContent(input01Doc, 'bookmarkName', bookmarkContent);
// 保存输出文件 FileOutputStream outputStream = new FileOutputStream(outputFilePath); input01Doc.write(outputStream); outputStream.close();
System.out.println('替换成功,新文件已保存为 ' + outputFilePath); } catch (IOException e) { e.printStackTrace(); } }
private static String getBookmarkContent(XWPFDocument document, String bookmarkName) { for (IBodyElement element : document.getBodyElements()) { if (element instanceof XWPFParagraph) { XWPFParagraph paragraph = (XWPFParagraph) element; for (XWPFRun run : paragraph.getRuns()) { for (CTBookmark bookmark : run.getCTR().getBookmarkStartList()) { if (bookmark.getName().equals(bookmarkName)) { return run.getText(0); } } } } else if (element instanceof XWPFTable) { XWPFTable table = (XWPFTable) element; for (XWPFTableRow row : table.getRows()) { for (XWPFTableCell cell : row.getTableCells()) { for (XWPFParagraph paragraph : cell.getParagraphs()) { for (XWPFRun run : paragraph.getRuns()) { for (CTBookmark bookmark : run.getCTR().getBookmarkStartList()) { if (bookmark.getName().equals(bookmarkName)) { return run.getText(0); } } } } } } } } return null; }
private static void replaceBookmarkContent(XWPFDocument document, String bookmarkName, String newContent) { for (IBodyElement element : document.getBodyElements()) { if (element instanceof XWPFParagraph) { XWPFParagraph paragraph = (XWPFParagraph) element; for (XWPFRun run : paragraph.getRuns()) { for (CTBookmark bookmark : run.getCTR().getBookmarkStartList()) { if (bookmark.getName().equals(bookmarkName)) { run.setText(newContent, 0); } } } } else if (element instanceof XWPFTable) { XWPFTable table = (XWPFTable) element; for (XWPFTableRow row : table.getRows()) { for (XWPFTableCell cell : row.getTableCells()) { for (XWPFParagraph paragraph : cell.getParagraphs()) { for (XWPFRun run : paragraph.getRuns()) { for (CTBookmark bookmark : run.getCTR().getBookmarkStartList()) { if (bookmark.getName().equals(bookmarkName)) { run.setText(newContent, 0); } } } } } } } } }}
说明:
- 确保已将Apache POI 5.2.2库添加到您的项目中。* 将代码中的
'bookmarkName'替换为您要操作的实际书签名称。* 代码首先加载两个输入Word文档。* 然后,它使用getBookmarkContent方法从input03.docx中提取指定书签的内容。* 接下来,使用replaceBookmarkContent方法将input01.docx中相同书签的内容替换为提取的内容。* 最后,将修改后的文档保存到新的输出文件input04.docx。
希望此示例对您有所帮助!
原文地址: https://www.cveoy.top/t/topic/fLZF 著作权归作者所有。请勿转载和采集!