如何读回嵌入式OLE对象Tika解析器?

时间:2018-02-18 16:06:28

标签: java apache-poi ole apache-tika

我正在使用Tika / tika-app-1.17.jar来提取出一张有两张幻灯片的MS-PowerPoint(.pptx) - 一张幻灯片由一个嵌入式Excel /表格组成(我假设是一个OLE自动化对象)。第二个是带内容的普通幻灯片。

我的问题是尝试使用Apache POIFS将.pptx的提取部分(特别是嵌入式Excel /表)读回Java VM。 POI无法将生成的slide1_rId3_oleObject1.bin识别为嵌入的OLE对象。运行PowerShell(gc命令)向我显示二进制文件确实有正确的“标题” - 这是转储的前30个字节:

d0  cf  11  e0  a1  b1  1a  e1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  3e  0  3  0  fe  ff

我尝试将文件作为DocumentInputStream重新读取,并尝试将其作为Ole10Native实现 - 来自POIFS,但没有取得多大成功。

当Tika提取.pptx部分时,我注意到以下内容。这是Tika在打开--list-parser-details选项的情况下运行(和-v用于详细):

org.apache.tika.parser.AutoDetectParser (Composite Parser):
  org.apache.tika.parser.CompositeParser (Composite Parser):
     org.apache.tika.parser.txt.TXTParser (Wrapped by With Types)
        text/plain
     org.apache.tika.parser.pdf.PDFParser (Wrapped by With Types)
        application/pdf
     org.apache.tika.parser.html.HtmlParser (Wrapped by With Types)
        text/html
        application/vnd.wap.xhtml+xml
        application/x-asp
        application/xhtml+xml
     org.apache.tika.parser.microsoft.OfficeParser (Wrapped by With Types)
        application/x-tika-msoffice-embedded; format=ole10_native
        application/msword
        application/vnd.visio
        application/vnd.ms-project
more output...
     org.apache.tika.parser.microsoft.ooxml.OOXMLParser (Wrapped by With Types)
        application/vnd.ms-powerpoint.template.macroenabled.12
        application/vnd.ms-excel.addin.macroenabled.12
        application/vnd.openxmlformats-officedocument.wordprocessingml.template
        application/vnd.ms-excel.sheet.binary.macroenabled.12
        application/vnd.openxmlformats-officedocument.wordprocessingml.document
more output...
<?xml version="1.0" encoding="UTF-8"?>
 <html xmlns="http://www.w3.org/1999/xhtml">
  <head>
   <meta name="X-Parsed-By" content="org.apache.tika.parser.CompositeParser"/>
   <meta name="X-Parsed-By" content="org.apache.tika.parser.microsoft.OfficeParser"/>
   <meta name="resourceName" content="sample.pptx"/>
   <meta name="Content-Length" content="1536"/>
   <meta name="Content-Type" content="application/x-tika-msoffice"/>
   <title/>
  </head>
  <body/>
 </html>

我可以共享我用来尝试实现嵌入式.bin文件的代码(用Java)。但是,我还没有看到有人回读使用POIFS从Tika中提取的这些“嵌入式OLE”文件之一的具体示例。这是否可能 - 或者是否有更有效的方法来做到这一点 - 我忽略了?

感谢您提供的任何指导或代码示例。

0 个答案:

没有答案