晴空朗月
BlogJava
首页
新文章
新随笔
聚合
管理
posts - 3, comments - 12, trackbacks - 0
从PDF文件中提取文字
改写PDF在线浏览前,先将以往写的从提取PDF文件提取文本的代码留个爪,以便今后有用。
package
com.eimone.institution.service.impl;
import
java.io.BufferedInputStream;
import
java.io.BufferedOutputStream;
import
java.io.File;
import
java.io.FileInputStream;
import
java.io.FileNotFoundException;
import
java.io.FileOutputStream;
import
java.io.IOException;
import
java.io.Writer;
import
java.util.Date;
import
java.util.List;
import
javax.annotation.Resource;
import
org.apache.pdfbox.pdfparser.PDFParser;
import
org.apache.pdfbox.pdmodel.PDDocument;
import
org.apache.pdfbox.util.PDFTextStripper;
import
org.apache.struts2.ServletActionContext;
import
org.hibernate.criterion.DetachedCriteria;
import
org.springframework.stereotype.Component;
import
com.eimone.institution.bean.Attachment;
import
com.eimone.institution.dao.IInstitutionDao;
import
com.eimone.institution.model.Institution;
import
com.eimone.institution.service.IInstitutionService;
public
class
InstitutionServiceImpl
{
private
IInstitutionDao institutionDao;
public
Institution saveInstitution(Institution institution,
Attachment attachment)
{
if
(
!
(attachment
==
null
||
attachment.getFileFileName()
==
null
||
attachment
.getFileFileName().length
==
0
))
{
finishAttachment(attachment, institution);
}
Date now
=
new
Date();
institution.setPublishTime(now);
return
institutionDao.save(institution);
}
private
String finishAttachment(Attachment attachment,
Institution institution)
{
String info
=
""
;
File[] files
=
attachment.getFile();
String path
=
ServletActionContext.getServletContext().getRealPath(
"
regulations
"
);
File desc
=
new
File(path);
if
(
!
desc.exists())
{
desc.mkdir();
}
for
(
int
i
=
0
; i
<
files.length; i
++
)
{
File file
=
files[i];
long
now
=
System.currentTimeMillis();
String fileName
=
attachment.getFileFileName()[i];
path
+=
"
\\
"
+
now
+
"
_
"
+
fileName;
institution.setUrl(now
+
"
_
"
+
fileName);
saveFile(file, path);
institution.setContent(getTextFromPdf(path));
}
return
info;
}
public
void
saveFile(File file, String path)
{
BufferedOutputStream bof
=
null
;
BufferedInputStream bis
=
null
;
try
{
FileOutputStream fos
=
new
FileOutputStream(path);
bof
=
new
BufferedOutputStream(fos);
bis
=
new
BufferedInputStream(
new
FileInputStream(file));
byte
[] buffer
=
new
byte
[
1024
];
try
{
int
len
=
bis.read(buffer);
while
(len
>
0
)
{
bof.write(buffer,
0
, len);
len
=
bis.read(buffer);
}
}
catch
(IOException e)
{
e.printStackTrace();
}
}
catch
(FileNotFoundException e)
{
e.printStackTrace();
}
finally
{
try
{
if
(bof
!=
null
)
{
bof.close();
}
if
(bis
!=
null
)
{
bis.close();
}
}
catch
(IOException e)
{
e.printStackTrace();
}
}
}
/** */
/**
*
@param
filePath
* 文件路径
*
@return
读出的pdf的内容
*/
public
String getTextFromPdf(String filePath)
{
String result
=
null
;
FileInputStream is
=
null
;
PDDocument document
=
null
;
try
{
is
=
new
FileInputStream(filePath);
PDFParser parser
=
new
PDFParser(is);
parser.parse();
document
=
parser.getPDDocument();
PDFTextStripper stripper
=
new
PDFTextStripper();
result
=
stripper.getText(document);
}
catch
(FileNotFoundException e)
{
e.printStackTrace();
}
catch
(IOException e)
{
e.printStackTrace();
}
catch
(NoClassDefFoundError e)
{
e.printStackTrace();
}
finally
{
if
(is
!=
null
)
{
try
{
is.close();
}
catch
(IOException e)
{
e.printStackTrace();
}
}
if
(document
!=
null
)
{
try
{
document.close();
}
catch
(IOException e)
{
e.printStackTrace();
}
}
}
return
result;
}
public
static
void
main(String[] args)
{
InstitutionServiceImpl impl
=
new
InstitutionServiceImpl();
System.out.println(impl.getTextFromPdf(
"
d:\\OUTLINE_DESIGN.pdf
"
));
}
}
posted on 2010-10-24 15:53
[ 王志伟 ]
阅读(831)
评论(0)
编辑
收藏
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
<
2024年12月
>
日
一
二
三
四
五
六
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
常用链接
我的随笔
我的文章
我的评论
我的参与
最新评论
留言簿
(1)
给我留言
查看公开留言
查看私人留言
随笔档案
(3)
2011年8月 (1)
2011年4月 (1)
2011年2月 (1)
文章档案
(29)
2011年8月 (2)
2011年7月 (2)
2011年5月 (2)
2011年4月 (1)
2011年3月 (1)
2011年2月 (1)
2010年12月 (3)
2010年11月 (1)
2010年10月 (4)
2010年8月 (1)
2010年6月 (6)
2010年5月 (1)
2010年3月 (3)
2010年2月 (1)
搜索
最新评论
1. re: 利用JS从父页面给IFRAME的子页面调用CSS样式文件
ada
--adas
2. re: java用户角色权限设计
得多顶顶顶
--得多
3. re: Hibernate注解三个常见问题
十分好!!!
--too
4. re: java用户角色权限设计
这个确实很不错,功能模块和方法多给牵扯到了,确实可以重用。
--红尘
5. re: java用户角色权限设计 [未登录]
评论内容较长,点击标题查看
--gg
阅读排行榜
1. 程序员必须知道的SQLSERVER数据库优化技巧(422)
2. POJO含义(340)
3. 系统显示时间比实际的晚8小时解决方法(225)
评论排行榜
1. 程序员必须知道的SQLSERVER数据库优化技巧(0)
2. POJO含义(0)
3. 系统显示时间比实际的晚8小时解决方法(0)