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-документа? благодарю вас
В соответствии с Ошибка 50992 и примечания к выпуску, poppler теперь поточно-ориентирован.
Тем не менее, я заметил следующую строку:
dst += page->text(QRect());
обращается к указателю на страницу, хотя вы ранее создали из этого указателя unique_ptr page_del, к которому нет доступа. Можно ли очистить unique_ptr перед тем, как вы получите доступ к указателю?
Других решений пока нет …