我有ms文档包含文本和图像.我想解析它们以获得xml结构.在研究之后,我最终使用apache tika来转换我的文档.我可以将我的doc解析为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.然后将为所有嵌入资源调用您的Parser,允许您根据需要将其保存

我能想到的最好的例子是Tika CLI,正如-z(extract)标志所使用的那样.如果您查看source code for TikaCLI,那么您正在寻找FileEmbeddedDocumentExtractor作为示例.

最简单的代码是这样的:

final AutoDetectParser parser = new AutoDetectParser();

public class ExtractParser extends AbstractParser {

private int att = 0;

public Set 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,则取决于您想要做什么

标签:java,apache-tika

来源: https://codeday.me/bug/20190529/1175923.html

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐