diff options
author | Stefan BrĂ¼ns <stefan.bruens@rwth-aachen.de> | 2024-03-30 19:24:12 +0100 |
---|---|---|
committer | Albert Astals Cid <aacid@kde.org> | 2024-04-07 17:25:04 +0000 |
commit | 58f721067044baeee1ac56cdc679cc5e97dcbd69 (patch) | |
tree | 33d2ed4f6790a396db46cec8da7621c2af87db06 | |
parent | 7ecb49e8cf696e836663afa159c4ae809b3861a7 (diff) |
Fix Qt text extraction for Landscape/Seascape pages
TextOutputDev::getText expects rotated coordinates, e.g. the correct
bounds for an A4 Landscape page are {0, 0, 842, 595}.
-rw-r--r-- | qt5/src/poppler-page.cc | 6 | ||||
-rw-r--r-- | qt5/tests/check_actualtext.cpp | 1 | ||||
-rw-r--r-- | qt6/src/poppler-page.cc | 6 | ||||
-rw-r--r-- | qt6/tests/check_actualtext.cpp | 1 |
4 files changed, 10 insertions, 4 deletions
diff --git a/qt5/src/poppler-page.cc b/qt5/src/poppler-page.cc index 853ee3b9..a4268de6 100644 --- a/qt5/src/poppler-page.cc +++ b/qt5/src/poppler-page.cc @@ -654,7 +654,11 @@ QString Page::text(const QRectF &r, TextLayout textLayout) const m_page->parentDoc->doc->displayPageSlice(output_dev, m_page->index + 1, 72, 72, 0, false, true, false, -1, -1, -1, -1, nullptr, nullptr, nullptr, nullptr, true); if (r.isNull()) { const PDFRectangle *rect = m_page->page->getCropBox(); - s = output_dev->getText(rect->x1, rect->y1, rect->x2, rect->y2); + if (orientation() == Orientation::Portrait || orientation() == Orientation::UpsideDown) { + s = output_dev->getText(rect->x1, rect->y1, rect->x2, rect->y2); + } else { + s = output_dev->getText(rect->y1, rect->x1, rect->y2, rect->x2); + } } else { s = output_dev->getText(r.left(), r.top(), r.right(), r.bottom()); } diff --git a/qt5/tests/check_actualtext.cpp b/qt5/tests/check_actualtext.cpp index f1a04dfd..1716afd6 100644 --- a/qt5/tests/check_actualtext.cpp +++ b/qt5/tests/check_actualtext.cpp @@ -92,7 +92,6 @@ void TestActualText::checkAllOrientations() std::unique_ptr<Poppler::Page> page { doc->page(pageNr) }; QVERIFY(page); - QEXPECT_FAIL("Landscape", "Cropbox not rotated", Continue); QCOMPARE(page->text(area), text); } diff --git a/qt6/src/poppler-page.cc b/qt6/src/poppler-page.cc index ce4d18d9..709a3378 100644 --- a/qt6/src/poppler-page.cc +++ b/qt6/src/poppler-page.cc @@ -653,7 +653,11 @@ QString Page::text(const QRectF &r, TextLayout textLayout) const m_page->parentDoc->doc->displayPageSlice(output_dev, m_page->index + 1, 72, 72, 0, false, true, false, -1, -1, -1, -1, nullptr, nullptr, nullptr, nullptr, true); if (r.isNull()) { const PDFRectangle *rect = m_page->page->getCropBox(); - s = output_dev->getText(rect->x1, rect->y1, rect->x2, rect->y2); + if (orientation() == Orientation::Portrait || orientation() == Orientation::UpsideDown) { + s = output_dev->getText(rect->x1, rect->y1, rect->x2, rect->y2); + } else { + s = output_dev->getText(rect->y1, rect->x1, rect->y2, rect->x2); + } } else { s = output_dev->getText(r.left(), r.top(), r.right(), r.bottom()); } diff --git a/qt6/tests/check_actualtext.cpp b/qt6/tests/check_actualtext.cpp index 655626be..bd6f9b26 100644 --- a/qt6/tests/check_actualtext.cpp +++ b/qt6/tests/check_actualtext.cpp @@ -84,7 +84,6 @@ void TestActualText::checkAllOrientations() std::unique_ptr<Poppler::Page> page { doc->page(pageNr) }; QVERIFY(page); - QEXPECT_FAIL("Landscape", "Cropbox not rotated", Continue); QCOMPARE(page->text(area), text); } |