POI相关使用以及复杂表格读取

poi读取段落demo

package com.ocr.word.poi;

import java.io.FileInputStream;
import java.util.List;

import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;

public class ParagraphReader {
    public static void main(String[] args) {
        try {
            FileInputStream fis = new FileInputStream("D:\\word\\aaa.docx");
            XWPFDocument xdoc = new XWPFDocument(OPCPackage.open(fis));

            List<XWPFParagraph> paragraphList = xdoc.getParagraphs();

            for (XWPFParagraph paragraph : paragraphList) {

                System.out.println(paragraph.getText());
                System.out.println(paragraph.getAlignment());
                System.out.print(paragraph.getRuns().size());
                System.out.println(paragraph.getStyle());

                // Returns numbering format for this paragraph, eg bullet or lowerLetter.
                System.out.println(paragraph.getNumFmt());
                System.out.println(paragraph.getAlignment());

                System.out.println(paragraph.isWordWrapped());

                System.out.println("********************************************************************");
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

poi读取表格简单demo

package com.ocr.word.poi;

import java.io.FileInputStream;
import java.util.Iterator;
import java.util.List;

import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xwpf.usermodel.IBodyElement;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFTable;

public class TableReader {
    public static void main(String[] args) {
        try {
            FileInputStream fis = new FileInputStream("D:\\word\\aaa.docx");
            XWPFDocument xdoc = new XWPFDocument(OPCPackage.open(fis));
            Iterator bodyElementIterator = xdoc.getBodyElementsIterator();
            while (bodyElementIterator.hasNext()) {
                IBodyElement element = (IBodyElement) bodyElementIterator.next();

                if ("TABLE".equalsIgnoreCase(element.getElementType().name())) {
                    List<XWPFTable> tableList = element.getBody().getTables();
                    for (XWPFTable table : tableList) {
                        System.out.println("Total Number of Rows of Table:" + table.getNumberOfRows());
                        for (int i = 0; i < table.getRows().size(); i++) {

                            for (int j = 0; j < table.getRow(i).getTableCells().size(); j++) {
                                System.out.println(table.getRow(i).getCell(j).getText());
                            }
                        }
                    }
                }
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

poi读取样式

package com.ocr.word.poi;
import java.io.FileInputStream;
import java.util.Iterator;
import java.util.List;

import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;

public class StyleReader {

    public static void main(String[] args) {
        try {
            FileInputStream fis = new FileInputStream("D:\\word\\aaa.docx");
            XWPFDocument xdoc = new XWPFDocument(OPCPackage.open(fis));

            List<XWPFParagraph> paragraphList = xdoc.getParagraphs();

            for (XWPFParagraph paragraph : paragraphList) {

                for (XWPFRun rn : paragraph.getRuns()) {

                    System.out.println(rn.isBold());
                    System.out.println(rn.isHighlighted());
                    System.out.println(rn.isCapitalized());
                    System.out.println(rn.getFontSize());
                }

                System.out.println("********************************************************************");
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }

    }

}

poi读取doc和docx文本demo

package com.ocr.word;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import org.apache.poi.POIXMLDocument;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
import org.springframework.util.FileCopyUtils;

public class Readword {

    // 全⻆角半⻆角符号转化之间的间隔
    public static final char DBC_SBC_STEP = 65248;
    private final static String RESULT_DATA = "data";
    private final static String RESULT_ANGLE = "angle";
    private final static String RESULT_WORDS_INFO = "prism_wordsInfo";

    /**
     * 字符串转unicode
     * 
     * @param str
     * @return
     */
    public static String stringToUnicode(String str) {
        StringBuffer sb = new StringBuffer();
        char[] c = str.toCharArray();
        for (int i = 0; i < c.length; i++) {
            sb.append("\\u" + Integer.toHexString(c[i]));
        }
        return sb.toString();
    }

    /**
     * 获取段落内容
     * 
     * @param paragraph
     */
    private static void getParagraphText(XWPFParagraph paragraph) {
        // 获取段落中所有内容
        List<XWPFRun> runs = paragraph.getRuns();
        if (runs.size() == 0) {
            System.out.println("按了回车(新段落)");
            return;
        }
        StringBuffer runText = new StringBuffer();
        for (XWPFRun run : runs) {
            runText.append(run.text());
        }
        if (runText.length() > 0) {
            runText.append(",对齐方式:").append(paragraph.getAlignment().name());
            System.out.println(runText);
        }
    }

    /**
     * 获取表格内容
     * 
     * @param table
     */
    private static void getTabelText(XWPFTable table) {
        List<XWPFTableRow> rows = table.getRows();

        for (XWPFTableRow row : rows) {
            List<XWPFTableCell> cells = row.getTableCells();
            for (XWPFTableCell cell : cells) {
                // 简单获取内容(简单方式是不能获取字体对齐方式的)
                // System.out.println(cell.getText());
                // 一个单元格可以理解为一个word文档,单元格里也可以加段落与表格
                List<XWPFParagraph> paragraphs = cell.getParagraphs();
                for (XWPFParagraph paragraph : paragraphs) {
                    getParagraphText(paragraph);
                }
            }
        }
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String filePath="D:\\word\\aaa.doc";
        StringBuffer wordMapStr=new StringBuffer();

        Map wordMap = new LinkedHashMap();//创建一个map对象存放word中的内容
        try {
            if(filePath.endsWith(".doc")){ ///判断文件格式
                InputStream fis = new FileInputStream(new File(filePath));
                WordExtractor wordExtractor = new WordExtractor(fis);//使用HWPF组件中WordExtractor类从Word文档中提取文本或段落
                int i=1;
                for(String words : wordExtractor.getParagraphText()){//获取段落内容
                    System.out.println(words);//.replaceAll("", "")
                    wordMap.put("DOC文档,第("+i+")段内容",words);
                    wordMapStr.append(words.replaceAll("", "")+"\n");
                    i++;
                }
                fis.close();
            }
            if(filePath.endsWith(".docx")){
                File uFile = new File("tempFile.docx");//创建一个临时文件
                if(!uFile.exists()){
                    uFile.createNewFile();
                }
                FileCopyUtils.copy(new File(filePath), uFile);//复制文件内容
                OPCPackage opcPackage = POIXMLDocument.openPackage("tempFile.docx");//包含所有POI OOXML文档类的通用功能,打开一个文件包。
                XWPFDocument document = new XWPFDocument(opcPackage);//使用XWPF组件XWPFDocument类获取文档内容
                List<XWPFParagraph> paras = document.getParagraphs();
                int i=1;
                for(XWPFParagraph paragraph : paras){
                    String words = paragraph.getText();
                    System.out.println(words);
                    wordMap.put("DOCX文档,第("+i+")段内容",words+"\n");
                    wordMapStr.append(words);
                    i++;
                }
                List<XWPFTable> it = document.getTables();

                it.forEach(item->{
                    wordMapStr.append(item.getText());
                });
                uFile.delete();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("-->"+wordMapStr.toString());
       System.out.println(wordMap);

    }

}

猜你喜欢

转载自blog.51cto.com/4534309/2477847