summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan BrĂ¼ns <stefan.bruens@rwth-aachen.de>2024-03-30 19:24:12 +0100
committerAlbert Astals Cid <aacid@kde.org>2024-04-07 17:25:04 +0000
commit58f721067044baeee1ac56cdc679cc5e97dcbd69 (patch)
tree33d2ed4f6790a396db46cec8da7621c2af87db06
parent7ecb49e8cf696e836663afa159c4ae809b3861a7 (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.cc6
-rw-r--r--qt5/tests/check_actualtext.cpp1
-rw-r--r--qt6/src/poppler-page.cc6
-rw-r--r--qt6/tests/check_actualtext.cpp1
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);
}