使用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文档中提取文本?谢谢
答案 0 :(得分:0)
根据Bug 50992和发行说明,poppler现在是线程安全的。
但是,我注意到以下一行:
dst += page->text(QRect());
访问页面指针,尽管您之前从此指针创建了一个unique_ptr page_del,但未访问该页面指针。在访问指针之前是否可以清除unique_ptr?