我想问下 JAVA中 如何读取PDF文件里面的内容 谁给个详细的 例子 谢谢
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我想问下 JAVA中 如何读取PDF文件里面的内容 谁给个详细的 例子 谢谢相关的知识,希望对你有一定的参考价值。
用Java简单的读取pdf文件中的数据:第一步:下载PDFBox-0.7.2.jar。提供一个下载地址:http://pdfhome.hope.com.cn/Resource.aspx?CID=63844604-5253-4ae1-b023-258c9e324061&RID=20cd8f94-1cee-40b6-a3df-0ef024f8e0d2解压后,把lib文件下的PDFBox-0.7.2.jar,PDFBox-0.7.2-log4j.jar放到你classpath路径下。(我把源码以及jar包都放到下面的附件里,方面你的使用。)
第二步:写个简单的读取pdf文件的程序。(PdfReader.java)
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.MalformedURLException;
import java.net.URL;
import org.pdfbox.pdmodel.PDDocument;
import org.pdfbox.util.PDFTextStripper;
public class PdfReader
public void readFdf(String file) throws Exception
// 是否排序
boolean sort = false;
// pdf文件名
String pdfFile = file;
// 输入文本文件名称
String textFile = null;
// 编码方式
String encoding = "UTF-8";
// 开始提取页数
int startPage = 1;
// 结束提取页数
int endPage = Integer.MAX_VALUE;
// 文件输入流,生成文本文件
Writer output = null;
// 内存中存储的PDF Document
PDDocument document = null;
try
try
// 首先当作一个URL来装载文件,如果得到异常再从本地文件系统//去装载文件
URL url = new URL(pdfFile);
//注意参数已不是以前版本中的URL.而是File。
document = PDDocument.load(pdfFile);
// 获取PDF的文件名
String fileName = url.getFile();
// 以原来PDF的名称来命名新产生的txt文件
if (fileName.length() > 4)
File outputFile = new File(fileName.substring(0, fileName
.length() - 4)
+ ".txt");
textFile = outputFile.getName();
catch (MalformedURLException e)
// 如果作为URL装载得到异常则从文件系统装载
//注意参数已不是以前版本中的URL.而是File。
document = PDDocument.load(pdfFile);
if (pdfFile.length() > 4)
textFile = pdfFile.substring(0, pdfFile.length() - 4)
+ ".txt";
// 文件输入流,写入文件倒textFile
output = new OutputStreamWriter(new FileOutputStream(textFile),
encoding);
// PDFTextStripper来提取文本
PDFTextStripper stripper = null;
stripper = new PDFTextStripper();
// 设置是否排序
stripper.setSortByPosition(sort);
// 设置起始页
stripper.setStartPage(startPage);
// 设置结束页
stripper.setEndPage(endPage);
// 调用PDFTextStripper的writeText提取并输出文本
stripper.writeText(document, output);
finally
if (output != null)
// 关闭输出流
output.close();
if (document != null)
// 关闭PDF Document
document.close();
/**
* @param args
*/
public static void main(String[] args)
// TODO Auto-generated method stub
PdfReader pdfReader = new PdfReader();
try
// 取得E盘下的SpringGuide.pdf的内容
pdfReader.readFdf("E:\\\\SpringGuide.pdf");
catch (Exception e)
e.printStackTrace();
这样就简单的完成了从pdf中读取数据了。在你的pdf文件所在的目录下生成一个同名的txt文件。 参考技术A 期待中!
JAVA IO流复制文件内容
用 int date =fis.read 后,再用 char进行转换,就能输出文本内容, 我的意思是,想用 char c的内容通过下面的output流输出到文本中,发现fos.write不能传递 C进去,有办法修改吗?
呃,简单地说是因为你对同一个文件同一次读取进行两次,第一次while读取完后,你本意是仅仅想看看里面到底是什么东西,所以你命令fis一个字节一个字节地往下读,直到fis读取到文件的末尾(此时while里面的!=-1条件为假),但事实上是,你认为你在看,其实你是在读。你看完后不满足又想看一次,你让fis梅开二度,又用另一个while去命令同一个fis一个字节一个字节的往下读,但早在第一个while结束后,fis已经卡在了文件的末尾了,再命令fis去read返回的永远都是-1,所以此时在第二个while语句中fis执行第一次read时就跳出来了,为啥?因为fis.read()返回为-1啊。所以C就压根没赋到,而且即便赋值,C也只能装下一个char啊。至于这么解决,思路如下:你是通过fis一个字节一个字节地读取给一个int类型变量date,那么既然date可以打印出,可以赋给char c,自然可以被写到文件里面去;那么你看看fos能不能一个字节一个字节地写文件,这样在while中,fis每读一个字节,fos就把它写文件(想想一下这个效率吧~~)。不过一定要记住,同一个fis不可能两次踏进同一个文件两次以上,一个while就玩完!! 参考技术A char c定义在外面不就行了 参考技术B 只能write字节数组吧,你先String.valueOf(c).然后再str.getBytes()不就行了吗?
以上是关于我想问下 JAVA中 如何读取PDF文件里面的内容 谁给个详细的 例子 谢谢的主要内容,如果未能解决你的问题,请参考以下文章
java 如何设置文件流的编码格式代码如下, 我设置后还是SJIS格式的.我想问下怎么改能设置成utf-8