提取Office以及PDF里的文字

  1. 利用pdfbox提取pdf文档里的文字
  2. 利用POI提取office文档里的文字

例子比较简单,作为记录

提取pdf文字,可以提取中文,有时会出现乱码

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import org.apache.pdfbox.pdfparser.PDFParser;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.util.PDFTextStripper;

import com.doc.manager.util.IDocParser;

/**
 * parse pdf documents
 * */
public class PdfParser implements IDocParser {
    @Override
    public String parser(String filePath){
        if(filePath==null)
            return null;
        File file=new File(filePath);
        if(!file.exists()){
            return null;
        }
        return parser(file);
    }

    @Override
    public String parser(File file){
        FileInputStream fileInputStream=null;
        try {
            fileInputStream = new FileInputStream(file);
        } catch (FileNotFoundException e1) {
            e1.printStackTrace();
            return null;
        }
        PDFParser parser;
        String reString=null;
        try {
            parser = new PDFParser(fileInputStream);
            parser.parse();
            PDDocument pdDocument=parser.getPDDocument();
            PDFTextStripper pdfTextStripper=new PDFTextStripper();
            reString=pdfTextStripper.getText(pdDocument);
        } catch (IOException e) {
            e.printStackTrace();
        }   
        return reString.trim();
    }

}

提取office文档文字,不支持WPS

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import org.apache.poi.hslf.extractor.PowerPointExtractor;
import org.apache.poi.hslf.usermodel.HSLFSlideShowImpl;
import org.apache.poi.hssf.extractor.ExcelExtractor;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.xslf.XSLFSlideShow;
import org.apache.poi.xslf.extractor.XSLFPowerPointExtractor;
import org.apache.poi.xssf.extractor.XSSFExcelExtractor;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.xmlbeans.XmlException;

import com.doc.manager.util.IDocParser;

/**
 * parse office, not for wps_office
 * */
public class OfficeParser implements IDocParser {
    private final String WORD_2003_AND_BEFORE="doc";
    private final String WORD_2007_AND_LATER="docx";
    private final String EXCEL_2003_AND_BEFORE="xls";
    private final String EXCEL_2007_AND_LATER="xlsx";
    private final String PPT_2003_AND_BEFORE="ppt";
    private final String PPT_2007_AND_LATER="pptx";
    @Override
    public String parser(String filePath) {
        if(filePath==null)
            return null;
        File file=new File(filePath);
        if(!file.exists())
            return null;
        return parser(file);
    }

    @Override
    public String parser(File file) {
        String filePath=file.getAbsolutePath();
        String fileExt=filePath.substring(filePath.lastIndexOf(".")+1);
        if(fileExt.equalsIgnoreCase(WORD_2003_AND_BEFORE))
            return parseWord2003AndBefore(file);
        if(fileExt.equalsIgnoreCase(WORD_2007_AND_LATER))
            return parseWord2007AndLater(file);
        if(fileExt.equalsIgnoreCase(EXCEL_2003_AND_BEFORE))
            return parseExcel2003AndBefore(file);
        if(fileExt.equalsIgnoreCase(EXCEL_2007_AND_LATER))
            return parseExcel2007AndLater(file);
        if(fileExt.equalsIgnoreCase(PPT_2003_AND_BEFORE))
            return parsePPT2003AndBefore(file);
        if(fileExt.equalsIgnoreCase(PPT_2007_AND_LATER))
            return parsePPT2007AndLater(file);
        else{
            System.out.println("不支持的文件类型");
        }
        return null;
    }
    /**
     * 解析word2003及之前版本
     * */
    public String parseWord2003AndBefore(File file){
        String text=null;
        WordExtractor extractor=null;
        try {
            HWPFDocument document=new HWPFDocument(new FileInputStream(file));
            extractor=new WordExtractor(document);
            text=extractor.getText();   
        } catch (IOException e) {       
            e.printStackTrace();
        }finally{
            if(extractor!=null)
                try {
                    extractor.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }
        return text.trim();
    }
    /**
     * 解析word2007及以后版本
     * */
    public String parseWord2007AndLater(File file){
        String text=null;
        try {
            XWPFDocument document=new XWPFDocument(new FileInputStream(file));
            XWPFWordExtractor extractor=new XWPFWordExtractor(document);
            text=extractor.getText();
            extractor.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return  text.trim();
    }
    /**
     * 解析excel2003及之前版本
     * */
    public String parseExcel2003AndBefore(File file){
        String text=null;
        try {
            FileInputStream inp = new FileInputStream(file);
            HSSFWorkbook wb = new HSSFWorkbook(new POIFSFileSystem(inp));
            ExcelExtractor extractor = new ExcelExtractor(wb);
            extractor.setFormulasNotResults(true);
            extractor.setIncludeSheetNames(false);
            text = extractor.getText();
            extractor.close();
            inp.close();
        } catch (IOException e) {       
            e.printStackTrace();
        }
        return text.trim();
    }
    /**
     * 解析excel2007及以后版本
     * */
    public String parseExcel2007AndLater(File file){
        String text=null;
        try {
            FileInputStream inp = new FileInputStream(file);
            XSSFWorkbook wb = new XSSFWorkbook(inp);
            XSSFExcelExtractor extractor=new XSSFExcelExtractor(wb);
            extractor.setFormulasNotResults(true);
            extractor.setIncludeSheetNames(false);
            text = extractor.getText();
            extractor.close();
            inp.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return  text.trim();
    }
    /**
     * 解析powerpoint2003及之前版本
     * */
    public String parsePPT2003AndBefore(File file){
        String text=null;
        try {
            FileInputStream inp = new FileInputStream(file);
            HSLFSlideShowImpl ppt=new HSLFSlideShowImpl(inp);
            PowerPointExtractor extractor=new PowerPointExtractor(ppt);
            text=extractor.getText();
            extractor.close();
            inp.close();
        } catch (IOException e) {       
            e.printStackTrace();
        }
        return text.trim();
    }
    /**
     * 解析powerpoint2007及以后版本
     * */
    public String parsePPT2007AndLater(File file){
        String text=null;
        try {
            FileInputStream inp = new FileInputStream(file);
            XSLFSlideShow slideshow=new XSLFSlideShow(file.getAbsolutePath());
            XSLFPowerPointExtractor extractor=new XSLFPowerPointExtractor(slideshow);
            text=extractor.getText();
            extractor.close();
            inp.close();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (OpenXML4JException e) {
            e.printStackTrace();
        } catch (XmlException e) {
            e.printStackTrace();
        }
        return  text.trim();
    }
}

工程源码:
http://download.csdn.net/detail/zlp1992/9275815

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java可以使用Apache POIPDFBox这两个开源库来提取Word和PDF文档中的文字内容。 1. 使用Apache POI提取Word文档中的文字内容 Apache POI是一个用于操作Microsoft Office格式文件的Java API。它可以用于读取、写入和操作Word、Excel和PowerPoint等文件。下面是使用Apache POI提取Word文档中的文字内容的示例代: ```java import java.io.FileInputStream; import org.apache.poi.xwpf.extractor.XWPFWordExtractor; import org.apache.poi.xwpf.usermodel.XWPFDocument; public class WordExtractorExample { public static void main(String[] args) throws Exception { String filePath = "example.docx"; FileInputStream fis = new FileInputStream(filePath); XWPFDocument document = new XWPFDocument(fis); XWPFWordExtractor extractor = new XWPFWordExtractor(document); String text = extractor.getText(); System.out.println(text); fis.close(); } } ``` 2. 使用PDFBox提取PDF文档中的文字内容 PDFBox是一个开源的Java库,用于处理PDF文档。它可以用于创建、修改和提取PDF文档中的内容。下面是使用PDFBox提取PDF文档中的文字内容的示例代: ```java import java.io.File; import java.io.IOException; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.text.PDFTextStripper; public class PdfExtractorExample { public static void main(String[] args) throws IOException { String filePath = "example.pdf"; File file = new File(filePath); PDDocument document = PDDocument.load(file); PDFTextStripper stripper = new PDFTextStripper(); String text = stripper.getText(document); System.out.println(text); document.close(); } } ``` 以上就是使用Java提取Word和PDF文档中的文字内容的示例代
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zlp1992

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值