使用 apache tika 获取 doc 文件中的嵌入资源

2024-03-22

我有包含文本和图像的 MS Word 文档。我想解析它们以获得 xml 结构。经过研究,我最终使用 apache tika 来转换我的文档。我可以将我的文档解析为 xml。这是我的代码:

AutoDetectParser parser=new AutoDetectParser();
InputStream input=new FileInputStream(new File("1.docx"));
Metadata metadata = new Metadata();
StringWriter sw = new StringWriter();
SAXTransformerFactory factory = (SAXTransformerFactory)SAXTransformerFactory.newInstance();
TransformerHandler handler = factory.newTransformerHandler();
handler.getTransformer().setOutputProperty(OutputKeys.METHOD, "xml");
handler.getTransformer().setOutputProperty(OutputKeys.INDENT, "no");
handler.setResult(new StreamResult(sw));

parser.parse(input, handler, metadata, new ParseContext());
String xhtml = sw.toString();

我想从文档中提取图像并将其转换为二进制格式。我不知道如何从文档中提取嵌入资源。


您需要定义自己的类来实现Parser并将其附加到ParseContext您在解析外部文档时提供。然后,您的解析器将被调用以获取所有嵌入资源,如果您愿意,您可以将它们保存出来

我能想到的最好的例子是 Tika CLI,由-z(摘录)标志。如果您查看TikaCLI 的源代码 http://svn.apache.org/repos/asf/tika/trunk/tika-app/src/main/java/org/apache/tika/cli/TikaCLI.java,您正在寻找FileEmbeddedDocumentExtractor作为你的例子。

最简单的代码如下:

final AutoDetectParser parser = new AutoDetectParser();

public class ExtractParser extends AbstractParser {
   private int att = 0;
   public Set<MediaType> getSupportedTypes(ParseContext context) {
     // Everything AutoDetect parser does
     return parser.getSupportedTypes(context);
   }
   public void parse(
        InputStream stream, ContentHandler handler,
        Metadata metadata, ParseContext context)
        throws IOException, SAXException, TikaException {
      // Stream to a new file
      File f = new File("out-" + (++att) + ".bin");
      FileOutputStream fout = new FileOutputStream(f);
      IOUtils.copy(strea, fout);
      fout.closee();
   }
}

InputStream input = new FileInputStream(new File("1.docx"));
Metadata metadata = new Metadata();
ParseContext context = new ParseContext();
context.set(Parser.class, extractParser);
parser.parse(input, handler, metadata, context);

您还可以使用EmbeddedDocumentExtractor如果您愿意的话,接口取决于您想要做什么,如果直接使用 Parser 更好

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 apache tika 获取 doc 文件中的嵌入资源 的相关文章

随机推荐