static Okular::TextPage *buildTextPage(const QVector<QMuPDF::TextBox*> &boxes, qreal width, qreal height) { Okular::TextPage *ktp = new Okular::TextPage(); for (int i = 0; i < boxes.size(); ++i) { QMuPDF::TextBox *box = boxes.at(i); const QChar c = box->text(); const QRectF charBBox = box->rect(); QString text(c); if (box->isAtEndOfLine()) { text.append('\n'); } ktp->append(text, new Okular::NormalizedRect( charBBox.left() / width, charBBox.top() / height, charBBox.right() / width, charBBox.bottom() / height)); } return ktp; }
/** * Generic Generator Implementation */ Okular::TextPage* TextDocumentGeneratorPrivate::createTextPage( int pageNumber ) const { #ifdef OKULAR_TEXTDOCUMENT_THREADED_RENDERING Q_Q( const TextDocumentGenerator ); #endif Okular::TextPage *textPage = new Okular::TextPage; int start, end; #ifdef OKULAR_TEXTDOCUMENT_THREADED_RENDERING q->userMutex()->lock(); #endif TextDocumentUtils::calculatePositions( mDocument, pageNumber, start, end ); { QTextCursor cursor( mDocument ); for ( int i = start; i < end - 1; ++i ) { cursor.setPosition( i ); cursor.setPosition( i + 1, QTextCursor::KeepAnchor ); QString text = cursor.selectedText(); if ( text.length() == 1 ) { QRectF rect; TextDocumentUtils::calculateBoundingRect( mDocument, i, i + 1, rect, pageNumber ); if ( pageNumber == -1 ) text = QStringLiteral("\n"); textPage->append( text, new Okular::NormalizedRect( rect.left(), rect.top(), rect.right(), rect.bottom() ) ); } } } #ifdef OKULAR_TEXTDOCUMENT_THREADED_RENDERING q->userMutex()->unlock(); #endif return textPage; }