我能找到的所有文档似乎都表明我只能提取整个文件的内容。但我需要单独提取页面。我需要为此编写自己的解析器吗?是否有一些我遗漏的明显方法?
问问题
12648 次
3 回答
7
<div><p>
实际上,Tika 确实通过在页面开始之前和</p></div>
页面结束之后发送元素来处理页面(至少在 pdf 中) 。您可以使用它轻松地在处理程序中设置页数(仅使用 only 计算页数<p>
):
public abstract class MyContentHandler implements ContentHandler {
private String pageTag = "p";
protected int pageNumber = 0;
...
@Override
public void startElement (String uri, String localName, String qName, Attributes atts) throws SAXException {
if (pageTag.equals(qName)) {
startPage();
}
}
@Override
public void endElement (String uri, String localName, String qName) throws SAXException {
if (pageTag.equals(qName)) {
endPage();
}
}
protected void startPage() throws SAXException {
pageNumber++;
}
protected void endPage() throws SAXException {
return;
}
...
}
使用 pdf 执行此操作时,当解析器未按正确顺序发送文本行时,您可能会遇到问题 - 请参阅使用 Apache Tika 0.9(和引擎盖下的 PDFBox)从 PDF 文件中提取文本以了解如何处理此问题。
于 2011-06-07T21:09:30.253 回答
5
您需要使用底层库 - Tika 在页面级别不做任何事情。
对于 PDF 文件,PDFBox 应该能够为您提供一些页面内容。对于 Word,来自 Apache POI 的 HWPF 和 XWPF 并没有真正做页面级别的事情 - 分页符不存储在文件中,而是需要根据文本 + 字体 + 页面大小动态计算......
于 2011-04-29T01:58:38.020 回答
5
您可以使用元数据对象的键获取 Pdf 中的页数,xmpTPg:NPages
如下所示:
Parser parser = new AutoDetectParser();
Metadata metadata = new Metadata();
ParseContext parseContext = new ParseContext();
parser.parse(fis, handler, metadata, parseContext);
metadata.get("xmpTPg:NPages");
于 2013-07-24T21:22:22.440 回答