Java使用Apache POI复制Word文档内容并保持格式 - SEO优化指南
package word;
import org.apache.poi.openxml4j.opc.OPCPackage;import org.apache.poi.xwpf.usermodel.*;
import java.io.FileInputStream;import java.io.FileOutputStream;
public class Word { public static void main(String[] args) { try { // 打开input01.docx文件 FileInputStream fis = new FileInputStream('08-00计算公式(第1版).docx'); XWPFDocument doc1 = new XWPFDocument(OPCPackage.open(fis));
// 打开input03.docx文件 FileInputStream fis2 = new FileInputStream('input03.docx'); XWPFDocument doc2 = new XWPFDocument(OPCPackage.open(fis2));
// 获取'应变计'书签位置的段落 XWPFParagraph bookmarkParagraph = doc2.getParagraphs().stream() .filter(p -> p.getCTP().getBookmarkStartList().stream() .anyMatch(b -> b.getName().equals('应变计'))) .findFirst().orElse(null);
if (bookmarkParagraph != null) { // 清空'应变计'书签位置的段落内容 for (int i = bookmarkParagraph.getRuns().size() - 1; i >= 0; i--) { bookmarkParagraph.removeRun(i); }
// 复制input01.docx文件的内容到'应变计'书签位置的段落 for (XWPFParagraph paragraph : doc1.getParagraphs()) { XWPFParagraph newParagraph = doc2.createParagraph(); // 复制段落样式 newParagraph.getCTP().setPPr(paragraph.getCTP().getPPr()); // 复制其他段落属性 (可选,根据需要添加) newParagraph.setAlignment(paragraph.getAlignment()); newParagraph.setVerticalAlignment(paragraph.getVerticalAlignment()); newParagraph.setSpacingBefore(paragraph.getSpacingBefore()); newParagraph.setSpacingAfter(paragraph.getSpacingAfter()); newParagraph.setSpacingBetween(paragraph.getSpacingBetween()); newParagraph.setIndentationFirstLine(paragraph.getIndentationFirstLine()); newParagraph.setIndentationHanging(paragraph.getIndentationHanging()); newParagraph.setIndentationLeft(paragraph.getIndentationLeft()); newParagraph.setIndentationRight(paragraph.getIndentationRight()); newParagraph.setPageBreak(paragraph.isPageBreak()); // ... 复制其他段落属性
for (XWPFRun run : paragraph.getRuns()) { XWPFRun newRun = newParagraph.createRun(); // 复制文本样式 newRun.getCTR().setRPr(run.getCTR().getRPr()); newRun.setText(run.getText(0)); } }
// 复制input01.docx文件的表格到'应变计'书签位置的段落 for (XWPFTable table : doc1.getTables()) { XWPFTable newTable = doc2.createTable(); // 复制表格样式 newTable.getCTTbl().setTblPr(table.getCTTbl().getTblPr()); for (XWPFTableRow row : table.getRows()) { XWPFTableRow newRow = newTable.createRow(); // 复制行样式 newRow.getCtRow().setTrPr(row.getCtRow().getTrPr()); for (XWPFTableCell cell : row.getTableCells()) { XWPFTableCell newCell = newRow.createCell(); // 复制单元格样式 newCell.getCTTc().setTcPr(cell.getCTTc().getTcPr()); for (XWPFParagraph paragraph : cell.getParagraphs()) { XWPFParagraph newParagraph = newCell.addParagraph(); // 复制段落样式 newParagraph.getCTP().setPPr(paragraph.getCTP().getPPr()); for (XWPFRun run : paragraph.getRuns()) { XWPFRun newRun = newParagraph.createRun(); // 复制文本样式 newRun.getCTR().setRPr(run.getCTR().getRPr()); newRun.setText(run.getText(0)); } } } } } }
// 保存修改后的input03.docx文件 FileOutputStream fos = new FileOutputStream('input03.docx'); doc2.write(fos);
// 关闭所有打开的文件流 fis.close(); fis2.close(); fos.close();
System.out.println('内容复制完成!'); } catch (Exception e) { e.printStackTrace(); } }}
原文地址: https://www.cveoy.top/t/topic/fNFe 著作权归作者所有。请勿转载和采集!