用java读取多种文件格式的文件(pdf,pptx,ppt,doc,docx..)
本文通过开源pdfbox和poi进行处理多种文件格式的文本读入
1.需要的jar的maven坐标:
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.2</version>
</dependency>
<!-- ppt,xls,docx,pptx,xlsx-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.14</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.14</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.14</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>3.14</version>
</dependency>
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
处理多种文件格式,详情见代码:
package cn.lcg.utils; import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.text.NumberFormat;
import java.util.List; import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
import org.apache.poi.hslf.extractor.PowerPointExtractor;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide;
import org.apache.poi.xslf.usermodel.XSLFSlideShow;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.openxmlformats.schemas.drawingml.x2006.main.CTRegularTextRun;
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBody;
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextParagraph;
import org.openxmlformats.schemas.presentationml.x2006.main.CTGroupShape;
import org.openxmlformats.schemas.presentationml.x2006.main.CTShape;
import org.openxmlformats.schemas.presentationml.x2006.main.CTSlide; /**
*
* @author yujian
* @date 2016年10月12日
* @version 0.0.1
*/
public class FileFormat {
/**
* 用来读取doc文件的方法
* @param filePath
* @return
* @throws Exception
*/
public static String getTextFromDoc(String filePath) throws Exception{
StringBuilder sb = new StringBuilder();
FileInputStream fis = new FileInputStream(new File(filePath));
HWPFDocument doc = new HWPFDocument(fis);
Range rang = doc.getRange();
sb.append(rang.text());
fis.close();
return sb.toString(); }
/**
* 用来读取docx文件
* @param filePath
* @return
* @throws IOException
* @throws Exception
*/
@SuppressWarnings("resource")
public static String getTextFromDocx(String filePath) throws IOException {
FileInputStream in = new FileInputStream(filePath);
XWPFDocument doc = new XWPFDocument(in);
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
String text = extractor.getText();
in.close();
return text;
}
/**
* 用来读取pdf文件
* @param filePath
* @return
* @throws IOException
*/
public static String getTextFromPDF(String filePath) throws IOException{
File input = new File(filePath);
PDDocument pd = PDDocument.load(input);
PDFTextStripper stripper = new PDFTextStripper();
return stripper.getText(pd);
}
/**
* 用来读取ppt文件
* @param filePath
* @return
* @throws IOException
*/
public static String getTextFromPPT( String filePath) throws IOException{
FileInputStream in = new FileInputStream(filePath);
PowerPointExtractor extractor = new PowerPointExtractor(in);
String content = extractor.getText();
extractor.close();
return content;
}
/**
* 用来读取pptx文件
* @param filePath
* @return
* @throws IOException
*/
public static String getTextFromPPTX( String filePath) throws IOException{
String resultString = null;
StringBuilder sb = new StringBuilder();
FileInputStream in = new FileInputStream(filePath);
try {
XMLSlideShow xmlSlideShow = new XMLSlideShow(in);
List<XSLFSlide> slides = xmlSlideShow.getSlides();
for(XSLFSlide slide:slides){
CTSlide rawSlide = slide.getXmlObject();
CTGroupShape gs = rawSlide.getCSld().getSpTree();
CTShape[] shapes = gs.getSpArray();
for(CTShape shape:shapes){
CTTextBody tb = shape.getTxBody();
if(null==tb){
continue;
}
CTTextParagraph[] paras = tb.getPArray();
for(CTTextParagraph textParagraph:paras){
CTRegularTextRun[] textRuns = textParagraph.getRArray();
for(CTRegularTextRun textRun:textRuns){
sb.append(textRun.getT());
}
}
}
}
resultString = sb.toString();
xmlSlideShow.close();
} catch (Exception e) {
e.printStackTrace();
}
return resultString;
}
/**
* 用来读取xls
* @param filePath
* @return
* @throws IOException
*/
public static String getTextFromxls(String filePath) throws IOException{
FileInputStream in = new FileInputStream(filePath);
StringBuilder content = new StringBuilder();
HSSFWorkbook workbook = new HSSFWorkbook(in);
for(int sheetIndex=0;sheetIndex<workbook.getNumberOfSheets();sheetIndex++){
HSSFSheet sheet = workbook.getSheetAt(sheetIndex);
for(int rowIndex=0;rowIndex<=sheet.getLastRowNum();rowIndex++){
HSSFRow row = sheet.getRow(rowIndex);
if(row==null){
continue;
}
for(int cellnum=0;cellnum<row.getLastCellNum();cellnum++){
HSSFCell cell = row.getCell(cellnum);
if(cell!=null){
content.append(cell.getRichStringCellValue().getString()+" ");
} }
} }
workbook.close();
return content.toString(); }
/**
* 用来读取xlsx文件
* @param filePath
* @return
* @throws IOException
*/
public static String getTextFromxlsx(String filePath) throws IOException{
StringBuilder content = new StringBuilder();
XSSFWorkbook workbook = new XSSFWorkbook(filePath);
for(int sheet=0;sheet<workbook.getNumberOfSheets();sheet++){
if(null!=workbook.getSheetAt(sheet)){
XSSFSheet aSheet =workbook.getSheetAt(sheet);
for(int row=0;row<=aSheet.getLastRowNum();row++){
if(null!=aSheet.getRow(row)){
XSSFRow aRow = aSheet.getRow(row);
for(int cell=0;cell<aRow.getLastCellNum();cell++){
if(null!=aRow.getCell(cell)){
XSSFCell aCell = aRow.getCell(cell);
if(convertCell(aCell).length()>0){
content.append(convertCell(aCell));
}
}
content.append(" ");
}
}
}
}
}
workbook.close();
return content.toString(); } private static String convertCell(Cell cell){
NumberFormat formater = NumberFormat.getInstance();
formater.setGroupingUsed(false);
String cellValue="";
if(cell==null){
return cellValue;
} switch(cell.getCellType()){
case HSSFCell.CELL_TYPE_NUMERIC:
cellValue = formater.format(cell.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_STRING:
cellValue = cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_BLANK:
cellValue = cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
cellValue = Boolean.valueOf(cell.getBooleanCellValue()).toString();
break;
case HSSFCell.CELL_TYPE_ERROR:
cellValue = String.valueOf(cell.getErrorCellValue());
break;
default:cellValue="";
}
return cellValue.trim();
}
}
解释的话就没有那么多时间,这些代码在我的项目中完全正确,所以你们可以放心使用。
用java读取多种文件格式的文件(pdf,pptx,ppt,doc,docx..)的更多相关文章
- java操作office和pdf文件java读取word,excel和pdf文档内容
在平常应用程序中,对office和pdf文档进行读取数据是比较常见的功能,尤其在很多web应用程序中.所以今天我们就简单来看一下Java对word.excel.pdf文件的读取.本篇博客只是讲解简单应 ...
- java读取各类型的文件
java读取各类型的文件 用到的几个包 bcmail-jdk14-132.jar/bcprov-jdk14-132.jar/checkstyle-all-4.2.jar/FontBox-0.1.0-d ...
- java中多种方式读文件
转自:http://www.jb51.net/article/16396.htm java中多种方式读文件 一.多种方式读文件内容. 1.按字节读取文件内容 2.按字符读取文件内容 3.按行读取文件内 ...
- Java读取Level-1行情dbf文件极致优化(3)
最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的.接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源.虽然Level-1 ...
- Java读取Level-1行情dbf文件极致优化(2)
最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的.接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源.虽然Level-1 ...
- Java读取并下载网络文件
CreateTime--2017年8月21日10:11:07 Author:Marydon import java.io.ByteArrayOutputStream; import java.io ...
- Java读取CSV和XML文件方法
游戏开发中,读取策划给的配置表是必不可少的,我在之前公司,策划给的是xml表来读取,现在公司策划给的是CSV表来读取,其实大同小异,也并不是什么难点,我就简单分享下Java如何读取XML文件和CSV文 ...
- java读取数据写入txt文件并将读取txt文件写入另外一个表
package com.xsw.test; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.F ...
- java读取UTF-8的txt文件发现开头的一个字符问题
今天遇到一个奇葩问题,在读取一个TXT文件时,出现开头多了一个问号(?).如下图: 莫名奇妙的多了一个.最后通过网上资料,知道在Java中,class文件采用utf8的编码方式,JVM运行时采用utf ...
随机推荐
- Mysql远程连接配置
Mysql远程连接配置 环境:unbuntu 16.04 最新版本的Mysql在远程连接的配置上与老版本有了一些出入,照原先的配置已经不行了,所以在这里记录一下遇到的所有新问题. 配置远程连接的步骤如 ...
- ubuntu 修改 ls 下的目录颜色
ubuntu 下, ls 显示的目录的颜色,怎么说呢,看起来太费劲了. 于是想着修改成容易识别的颜色. 于是搜索了一下. 这里列举三个搜到的教程吧. 简单说我按这上面的方法做了,然后都失败了. 1. ...
- 腾讯云AI平台张文杰:构建一站式机器学习服务平台
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 5月24日,以"无界数据无限智能"为主题的腾讯"云+未来"峰会AI大数据分论坛在广州拉开帷幕.此次分 ...
- python-入门教程(-)
# hello worldprint("hello world") # 变量msg = "使用变量"print(msg) # 字符串大小写变换(仅针对英文)na ...
- sublime text 3 3143注册码
1.点击help->enter license: —– BEGIN LICENSE —– TwitterInc 200 User License EA7E-890007 1D77F72E 390 ...
- MVVMLight - Messenger 2
本篇介绍MvvmLight中一个重要的东东,那就是Messenger. (一)Messenger的基本组成 Messenger类用于应用程序的通信,接受者只能接受注册的消息类型,另外目标类型可以被指定 ...
- access 2010,数学
access 2010(窗体控制和创建窗体) 窗体向导:选择表格---创建---窗体---窗体向导---选择表/查询---全选可用字段---选择布局---设置标题---完成. 其他窗体:选择表格--- ...
- golang获取变量数据类型
如果某个函数的入参是interface{},有下面几种方式可以获取入参的方法: 1 fmt: import "fmt" func main() { v := "hello ...
- mongodb操作之mongoose
/** * Created by chaozhou on 2015/10/6. */ var mongoose = require("mongoose"); var db = mo ...
- isPrototypeOf、instanceof、hasOwnProperty函数整理
isPrototypeOf 作用:检测一个对象是否是另一个对象的原型.或者说一个对象是否被包含在另一个对象的原型链中 var p = {x:1};//定义一个原型对象 var o = Object.c ...