用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 ...
随机推荐
- 正则基础之——NFA引擎匹配原理
记录一下一篇很好的博文:https://blog.csdn.net/lxcnn/article/details/4304651
- PIXI FlappyBird详解(9)
本文为了学习及使用pixi参考该文,使用pixi实现 这个实方式跟玉兔太空类似, 这里介绍下实现步骤 1.创建舞台及应用大小根据实际去定义 2.创建背景素材,可以采取纹理图集,在前边有提过或是看官网了 ...
- 【lua】LWT HttpdModule
要使用httpd模块,需要在脚本开头添加: require "httpd" httpd.pairs(apr_table) 用以遍历apr_table for key, value ...
- Golang教程:数组和切片
数组 数组是类型相同的元素的集合.例如,整数 5, 8, 9, 79, 76 的集合就构成了一个数组.Go不允许在数组中混合使用不同类型的元素(比如整数和字符串). 声明 var variable_n ...
- [转]Asp.Net Web API 2第十七课——Creating an OData Endpoint in ASP.NET Web API 2(OData终结点)
本文转自:http://www.cnblogs.com/aehyok/p/3545824.html 前言 很久没更新博客了,加上刚过年,现在准备重新开战,继续自己的学习之路.本文已同步到Web API ...
- Lucene学习之四:Lucene的索引文件格式(3)
本文转载自:http://www.cnblogs.com/forfuture1978/archive/2010/02/02/1661436.html ,略有删改和备注. 四.具体格式 4.2. 反向信 ...
- dns-prefetch使用整理
网站投放百度.谷歌联盟广告,百度分享.推荐等,由于不同的DNS请求,会增加了网页加载时间,用户等待时间过长会造成跳出率增高,对SEO有一定影响. DNS解析速度是造成页面延迟加载的最大的原因. DNS ...
- mysql Backup &recovery
备份数据库非常重要,这样您就可以恢复数据,并在发生问题时重新启动并运行,例如系统崩溃,硬件故障或用户错误地删除数据. 在升级MySQL安装之前,备份也是必不可少的保护措施,它们可用于将MySQL安装转 ...
- 快速搭建maven私服 Artifactory on Docker
1.下载官方镜像 docker pull docker.bintray.io/jfrog/artifactory-oss:latest 2.启动容器 docker run --name artifac ...
- java温故而知新(9)OOP(面向对象编程)理念
Object Oriented Programming (面向对象的程序设计) 1.定义 面向对象程序设计(OOP)的具体定义很难下,也很容易因此而引起争论,在 Object-Orie ...