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();        }    }}
Java使用Apache POI复制Word文档内容并保持格式 - SEO优化指南

原文地址: https://www.cveoy.top/t/topic/fNFe 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录