Tika 1.2 PDF解析错误 - org.apache.pdfbox.cos.COSString无法强制转换为org.apache.pdfbox.cos.COSDictionary

时间:2013-02-13 07:29:48

标签: solr solrj pdfbox apache-tika

我使用Solr 4.0和DIH(数据导入处理程序)与TikaProcessor一起从存储在数据库中的PDF文件中提取文本。当我运行索引时,它无法解析一些PDF文件并得到下面提到的堆栈跟踪。

由于Solr 4.0使用Tika 1.2,我编写了一个单元测试来使用Tika 1.2 API解析相同的PDF文件,我得到了同样的错误。

Tika 1.3罐也存在同样的问题。但是,当我尝试使用Tika 1.1罐时,它工作正常。如果您有任何人看到此错误以及如何解决此问题,请告诉我?

(我在tika邮件列表中发布了相同内容,但运气不太好)

当我打开PDF文件时,它显示PDF / A模式。不确定这个问题是否与问题有关。

以下是例外:

org.apache.tika.exception.TikaException: Unexpected RuntimeException from org.apache.tika.parser.pdf.PDFParser@1fbfd6<mailto:org.apache.tika.parser.pdf.PDFParser@1fbfd6>
      at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:244)
      at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:242)
      at org.apache.tika.parser.AutoDetectParser.parse(AutoDetectParser.java:120)
      at com.pc.TikaWithIndexing.main(TikaWithIndexing.java:53)
Caused by: java.lang.ClassCastException: org.apache.pdfbox.cos.COSString cannot be cast to org.apache.pdfbox.cos.COSDictionary
      at org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationLink.getAction(PDAnnotationLink.java:93)
      at org.apache.tika.parser.pdf.PDF2XHTML.endPage(PDF2XHTML.java:148)
      at org.apache.pdfbox.util.PDFTextStripper.processPage(PDFTextStripper.java:444)
      at org.apache.pdfbox.util.PDFTextStripper.processPages(PDFTextStripper.java:366)
      at org.apache.pdfbox.util.PDFTextStripper.writeText(PDFTextStripper.java:322)
      at org.apache.tika.parser.pdf.PDF2XHTML.process(PDF2XHTML.java:66)
      at org.apache.tika.parser.pdf.PDFParser.parse(PDFParser.java:153)
      at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:242)
      ... 3 more

以下是JAVA中的代码段:

 String fileString = "C:/Bernard A J Am Coll Surg 2009.pdf";
 File file = new File(fileString );
 URL url = file.toURI().toURL();

 ParseContext context = new ParseContext();;
 Detector detector = new DefaultDetector();;
 Parser parser =  new AutoDetectParser(detector);;
 Metadata metadata = new Metadata();
 context.set(Parser.class, parser); //PPt,word,xlsx-- pdf,html
 ByteArrayOutputStream outputstream = new ByteArrayOutputStream();
 InputStream input = TikaInputStream.get(url, metadata);
 ContentHandler handler = new BodyContentHandler(outputstream);
 parser.parse(input, handler, metadata, context);

 input.close();
 outputstream.close();

0 个答案:

没有答案