0

libpoppler-qt5.so を使用します。次のコードを使用して、PDF ドキュメントからテキストを抽出します。

QString pdf2txt(const char *buf, size_t len)
{

    Poppler::Document* document = Poppler::Document::loadFromData(QByteArray(buf, len));
    unique_ptr<Poppler::Document> doc_del(document);
    if (!document || document->isLocked()) throw runtime_error("pdf2txt document is locked or unavailable");

    const int pages = document->numPages();
    QString dst;
    for (int i = 0; i < pages; ++i)
    {
        Poppler::Page* page = document->page(i);
        if (!page) throw runtime_error("bad pdf document");
        unique_ptr<Poppler::Page> page_del(page);
        dst += page->text(QRect());
    }

    return dst;
}

ただし、複数のスレッドで使用するとセグメンテーション違反が発生します。1つのスレッドでは問題ないようです。このコードはスレッドセーフですか? PDFドキュメントからテキストを抽出するためのスレッドセーフなライブラリは他にありますか? ありがとうございました

4

1 に答える 1

0

バグ 50992とリリース ノートによると、現在 poppler はスレッドセーフです。

ただし、次の行に気付きました。

dst += page->text(QRect());

ページ ポインターにアクセスしますが、以前にこのポインターから unique_ptr page_del を作成しましたが、これにはアクセスしていません。ポインターにアクセスする前に、unique_ptr をクリーンアップできますか?

于 2016-02-04T12:34:29.880 に答える