MailContentHandler的源代码具有以下内容:
try {
BodyContentHandler bch = new BodyContentHandler(handler);
parser.parse(is, new EmbeddedContentHandler(bch), submd, context);
我现在想以字符串的形式读取正文内容,并根据需要添加一些元数据(如果找到/匹配/生成的话)...我似乎无法在BodyContentHandler对象上调用toString。
如果有人熟悉tika,并创建或更改了现有的解析,请向我指出正确的方向。
最佳答案
BodyContentHandler是修饰的ContentHandler,如javadocs中所述。它所做的只是过滤掉SAX事件,以便下游处理程序仅获取主体内容。但是,如果您创建without any arguments,它将在内部为您创建一个WriteOutContentHandler
,上限为100k。
要获取主体本身,您需要询问传递给BodyContentHandler
的任何处理程序以获取主体。如果您只需要纯文本,并且不会达到默认字符数限制,请执行以下操作:
BodyContentHandler bch = new BodyContentHandler();
parser.parse(is, bch, metadata, new ParseContext());
String plainText = bch.toString();
如果要获取正文的XHTML,则需要更多类似的内容:
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));
BodyContentHandler bch = new BodyContentHandler(handler);
parser.parse(is, bch, metadata, new ParseContext());
String xhtml = sw.toString();