0

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

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

Tika 1.3 jars 也有同样的问题。但是当我尝试使用 Tika 1.1 jar 时,它工作正常。如果你们中有人看到这个错误,请告诉我,如何解决这个问题?

(我在 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();
4

0 回答 0