我使用AutoDetectParser
类使用tika提取了.pdf文件的文本。但是当我使用相同的代码提取.ppt文件的文本时,它会引发异常。怎么做?
感谢
编辑:
我使用的代码是:
File file = new File("1.ppt");
InputStream input = new FileInputStream(file);
Parser autoDetectParser = new AutoDetectParser();
Metadata metadata = new Metadata();
StringWriter writer = new StringWriter();
ContentHandler handler = new WriteOutContentHandler(writer);
autoDetectParser.parse(input, handler, metadata, new ParseContext());
,例外是:
java.lang.NoSuchFieldError: SMALLER_BIG_BLOCK_SIZE_DETAILS
at org.apache.poi.poifs.filesystem.NPOIFSFileSystem.<init>(NPOIFSFileSystem.java:93)
at org.apache.poi.poifs.filesystem.NPOIFSFileSystem.<init>(NPOIFSFileSystem.java:190)
at org.apache.poi.poifs.filesystem.NPOIFSFileSystem.<init>(NPOIFSFileSystem.java:184)
at org.apache.tika.parser.microsoft.POIFSContainerDetector.getTopLevelNames(POIFSContainerDetector.java:371)
at org.apache.tika.parser.microsoft.POIFSContainerDetector.detect(POIFSContainerDetector.java:165)
at org.apache.tika.detect.CompositeDetector.detect(CompositeDetector.java:61)
at org.apache.tika.parser.AutoDetectParser.parse(AutoDetectParser.java:113)
at ppt.PPTParserTest.test3(PPTParserTest.java:52)
我发现问题是由jars
中的一些额外classpath
引起的。
答案 0 :(得分:5)
如果运行时类路径中有两个不同版本的POI,则会发生此异常。
在较新版本的POI中,NPOIFSFileSystem
引用POIFSConstants.SMALLER_BIG_BLOCK_SIZE_DETAILS
。旧版本的POI中不存在此常量。
我在我的类路径中遇到tika-app-1.4.jar
(捆绑了POI 3.9)和poi-3.0.2-FINAL-20080204.jar
的异常。
答案 1 :(得分:-2)
您可以更改方法WorkbookFactory.create(inputStream)
而不是WorkbookFactory.create(File)
,这可以解决您的问题。祝你好运!