11

私が見つけることができるすべてのドキュメントは、ファイルのコンテンツ全体しか抽出できないことを示唆しているようです。しかし、ページを個別に抽出する必要があります。そのために独自のパーサーを作成する必要がありますか? 私が見逃している明らかな方法はありますか?

4

3 に答える 3

7

<div><p>実際、Tikaは、ページの開始前とページの終了後に要素を送信することにより、ページを(少なくともpdfで)処理し</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 ファイルからテキストを抽出するを参照してください。

于 2011-06-07T21:09:30.253 に答える
5

基礎となるライブラリを操作する必要があります.Tikaはページレベルでは何もしません.

PDF ファイルの場合、PDFBox はいくつかのページ要素を提供できるはずです。Word の場合、Apache POI の HWPF と XWPF は実際にはページ レベルの処理を行いません。改ページはファイルに保存されず、代わりにテキスト + フォント + ページ サイズに基づいてその場で計算する必要があります...

于 2011-04-29T01:58:38.020 に答える
5

次のように、メタデータオブジェクトの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");
于 2013-07-24T21:22:22.440 に答える