java解析pdf文件,求大神提供代码,请注意是java语言的 50

我想要的是使用程序去解析pdf文件,如果某个pdf文件无法打开的(注意这个无法打开是直接点击时提示是pdf文件格式错误无法打开,和pdf文件已经损坏差不多一个意思),把路... 我想要的是使用程序去解析pdf文件,如果某个pdf文件无法打开的(注意这个无法打开是直接点击时提示是pdf文件格式错误无法打开,和pdf文件已经损坏差不多一个意思),把路径打印出来,能打开的则把pdf内容写到一个txt中。 展开
 我来答
zuanshigan
2013-09-29 · TA获得超过983个赞
知道小有建树答主
回答量:326
采纳率:100%
帮助的人:155万
展开全部

给你提供一个参考例子,你可以在这个例子上试试,修改修改。也是解析PDF的。

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.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.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("d:\\b.pdf");    
   } catch (Exception e) {    
    e.printStackTrace();    
   }    
  }    
 }
壕沟生产洗衣机
2013-09-29 · 超过35用户采纳过TA的回答
知道答主
回答量:104
采纳率:0%
帮助的人:73.4万
展开全部
zuanshigan这份代码没问题。简单补充一下吧,这份代码用的是Apache的PDFBox,功能很强大。可以看一下官网:http://pdfbox.apache.org/
不过估计楼主这种功能用itext应该也足够了,具体在这里:http://itextpdf.com/
而且itext使用起来相对简单一点吧(个人认为),判断pdf是否损坏可以直接用打开方法,如果没报错就是正常,捕获错误或者读取页数为0就是错误。以上。
追问
直接打开时提示格式错误,使用itext打开,直接提示这个文件损坏,也不抛出异常,pdfbox也是一样,我想要的不是提示文件损坏就完事,而是要抛出这个文件损坏的异常之类的,请问你有什么方法解决吗?
追答
可以判断第三方jar包返回的信息,然后自己定义异常抛出吧
throw new Exception这样子的。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhongtyler
2013-09-29 · TA获得超过4408个赞
知道大有可为答主
回答量:4384
采纳率:79%
帮助的人:895万
展开全部
补充一点吧,不是所有的pdf都可以读取的,有些通过保护方式,禁止复制的话,使用pdfbox也没用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jayby00
2017-08-16 · 超过48用户采纳过TA的回答
知道小有建树答主
回答量:95
采纳率:50%
帮助的人:49.6万
展开全部
你需要引入一个java的pdf框架.
我经常用的一个pdf框架是itext.你可以上网查一下api
2017年8月16日 11:23:13
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式