我找到的所有文档都似乎表明只能提取整个文件的内容,但我需要分别提取每一页的内容。我是否需要编写自己的解析器?有没有一些我忽略了的明显方法?
我找到的所有文档都似乎表明只能提取整个文件的内容,但我需要分别提取每一页的内容。我是否需要编写自己的解析器?有没有一些我忽略了的明显方法?
<div><p>
,并在页面结束后发送</p></div>
。您可以使用此方法轻松设置处理程序中的页面计数(只需使用<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文件中提取文本以了解如何处理此问题。
xmpTPg:NPages
键来获取Pdf中页面的数量,如下所示:Parser parser = new AutoDetectParser();
Metadata metadata = new Metadata();
ParseContext parseContext = new ParseContext();
parser.parse(fis, handler, metadata, parseContext);
metadata.get("xmpTPg:NPages");
您需要与底层库一起使用-Tika不在页面级别上执行任何操作。
对于PDF文件,PDFBox应该能够提供一些页面内容。对于Word文档,Apache POI的HWPF和XWPF并不真正执行页面级别的操作-页面断点不存储在文件中,而是需要根据文本+字体+页面大小动态计算...