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;
}

但是当它用于多个线程时会出现段错误。对于一个线程,它似乎没问题。这个代码线程安全吗?是否有任何其他线程安全库可以从 PDF 文档中提取文本?谢谢你

4

1 回答 1

0

根据错误 50992和发行说明,poppler 现在是线程安全的。

但是,我注意到以下行:

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

访问页面指针,尽管您之前从该指针创建了一个 unique_ptr page_del,但它没有被访问。在访问指针之前可以清理 unique_ptr 吗?

于 2016-02-04T12:34:29.880 回答