2013-09-25 84 views
1

我用PDFbox解析那个pdf document.It引发异常,说它找不到标题版本信息。任何想法?pdfbox标题版本信息错误

我认为版本是1.3我看到它时,我把每个字节char。 链路方法和输出的http://www.selab.isti.cnr.it/ws-mate/example.pdf

这里代码:

public String PDFtest(String textLink) throws IOException{ 
     PDFParser parser; 
     String parsedText = null; 
     PDFTextStripper pdfStripper; 
     PDDocument pdDoc; 
     COSDocument cosDoc; 
     PDDocumentInformation pdDocInfo; 


    StringBuilder sd=new StringBuilder(); 
    URL link; 
    try { 
     link = new URL(textLink); 
     URLConnection urlConn = link.openConnection(); 
     BufferedInputStream in = null; 
     in = new BufferedInputStream(urlConn.getInputStream()); 
     byte data[] = new byte[1024]; 
     in.read(data, 0, 1024); 

    parser = new PDFParser(in); 
    parser.parse(); 
    cosDoc = parser.getDocument(); 
    pdfStripper = new PDFTextStripper(); 
    pdDoc = new PDDocument(cosDoc); 
    parsedText = pdfStripper.getText(pdDoc); 
    } catch (MalformedURLException ex) { 
     Logger.getLogger(HTMLhelper.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    catch (NumberFormatException e){ 
     System.out.println("hata"); 
    } 

    return parsedText; 



} 

例外:

Exception in thread "main" java.io.IOException: Error: Header doesn't contain versioninfo 
    at org.apache.pdfbox.pdfparser.PDFParser.parseHeader(PDFParser.java:317) 
    at org.apache.pdfbox.pdfparser.PDFParser.parse(PDFParser.java:173) 
    at ParsingMachine.HTMLhelper.PDFtest(HTMLhelper.java:99) 
    at ParsingMachine.tester.main(tester.java:18) 
Java Result: 1 

回答

0

您第一读数据的前导千字节到字节数组:

in.read(data, 0, 1024); 

,然后你期望PDFBox与剩余的字节相处

parser = new PDFParser(in); 
parser.parse(); 

很可能实际的PDF标题包含在您从PDFBox解析器保留的那些前导字节中。

因此,只需让PDFBox读取所有数据即可。

+0

我用in.available更改了所有的1024个数据,但错误再次出现。每次运行程序时字节数组的大小都会改变 – user2638084

+1

为什么在允许之前从'in'中读取任何数据PDFBox解析流?根本不要! – mkl

1

您必须合并非pdf格式的文件。请仔细检查您的列表中是否有任何文件。