mirror of https://github.com/JakubMelka/PDF4QT.git
Fix table selection algorithm
This commit is contained in:
parent
2107ad7271
commit
33c00c2683
|
@ -1373,7 +1373,8 @@ PDFSelectTableTool::PDFSelectTableTool(PDFDrawWidgetProxy* proxy, QAction* actio
|
||||||
BaseClass(proxy, action, parent),
|
BaseClass(proxy, action, parent),
|
||||||
m_pickTool(nullptr),
|
m_pickTool(nullptr),
|
||||||
m_pageIndex(-1),
|
m_pageIndex(-1),
|
||||||
m_isTransposed(false)
|
m_isTransposed(false),
|
||||||
|
m_rotation(PageRotation::None)
|
||||||
{
|
{
|
||||||
m_pickTool = new PDFPickTool(proxy, PDFPickTool::Mode::Rectangles, this);
|
m_pickTool = new PDFPickTool(proxy, PDFPickTool::Mode::Rectangles, this);
|
||||||
connect(m_pickTool, &PDFPickTool::rectanglePicked, this, &PDFSelectTableTool::onRectanglePicked);
|
connect(m_pickTool, &PDFPickTool::rectanglePicked, this, &PDFSelectTableTool::onRectanglePicked);
|
||||||
|
@ -1568,7 +1569,7 @@ void PDFSelectTableTool::keyPressEvent(QWidget* widget, QKeyEvent* event)
|
||||||
cell.column = columnIndex;
|
cell.column = columnIndex;
|
||||||
cell.rectangle = QRectF(left, top, width, height);
|
cell.rectangle = QRectF(left, top, width, height);
|
||||||
|
|
||||||
PDFTextSelection textSelection = m_textLayout.createTextSelection(m_pageIndex, cell.rectangle.topLeft(), cell.rectangle.bottomRight(), Qt::yellow, true);
|
PDFTextSelection textSelection = m_textLayout.createTextSelection(m_pageIndex, cell.rectangle.bottomLeft(), cell.rectangle.topRight(), Qt::yellow, true);
|
||||||
cell.text = m_textLayout.getTextFromSelection(textSelection, m_pageIndex).trimmed();
|
cell.text = m_textLayout.getTextFromSelection(textSelection, m_pageIndex).trimmed();
|
||||||
cell.text = cell.text.remove(QChar('\n'));
|
cell.text = cell.text.remove(QChar('\n'));
|
||||||
|
|
||||||
|
@ -1576,6 +1577,21 @@ void PDFSelectTableTool::keyPressEvent(QWidget* widget, QKeyEvent* event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch (m_rotation)
|
||||||
|
{
|
||||||
|
case PageRotation::None:
|
||||||
|
{
|
||||||
|
for (TableCell& cell : tableCells)
|
||||||
|
{
|
||||||
|
cell.row = verticalBreaks.size() - cell.row;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (m_isTransposed)
|
if (m_isTransposed)
|
||||||
{
|
{
|
||||||
auto comparator = [](const TableCell& left, const TableCell right)
|
auto comparator = [](const TableCell& left, const TableCell right)
|
||||||
|
@ -1584,6 +1600,14 @@ void PDFSelectTableTool::keyPressEvent(QWidget* widget, QKeyEvent* event)
|
||||||
};
|
};
|
||||||
std::sort(tableCells.begin(), tableCells.end(), comparator);
|
std::sort(tableCells.begin(), tableCells.end(), comparator);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
auto comparator = [](const TableCell& left, const TableCell right)
|
||||||
|
{
|
||||||
|
return std::make_pair(left.row, left.column) < std::make_pair(right.row, right.column);
|
||||||
|
};
|
||||||
|
std::sort(tableCells.begin(), tableCells.end(), comparator);
|
||||||
|
}
|
||||||
|
|
||||||
// Make CSV string
|
// Make CSV string
|
||||||
QString string;
|
QString string;
|
||||||
|
@ -1634,6 +1658,7 @@ void PDFSelectTableTool::setActiveImpl(bool active)
|
||||||
m_isTransposed = false;
|
m_isTransposed = false;
|
||||||
m_horizontalBreaks.clear();
|
m_horizontalBreaks.clear();
|
||||||
m_verticalBreaks.clear();
|
m_verticalBreaks.clear();
|
||||||
|
m_rotation = PageRotation::None;
|
||||||
|
|
||||||
if (getTopToolstackTool())
|
if (getTopToolstackTool())
|
||||||
{
|
{
|
||||||
|
@ -1669,6 +1694,7 @@ void PDFSelectTableTool::onRectanglePicked(PDFInteger pageIndex, QRectF pageRect
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_rotation = rotation;
|
||||||
autodetectTableGeometry();
|
autodetectTableGeometry();
|
||||||
|
|
||||||
Q_EMIT messageDisplayRequest(tr("Table region was selected. Use left/right mouse buttons to add/remove rows/columns, then use Enter key to copy the table."), 5000);
|
Q_EMIT messageDisplayRequest(tr("Table region was selected. Use left/right mouse buttons to add/remove rows/columns, then use Enter key to copy the table."), 5000);
|
||||||
|
|
|
@ -421,6 +421,7 @@ private:
|
||||||
bool m_isTransposed;
|
bool m_isTransposed;
|
||||||
std::vector<PDFReal> m_horizontalBreaks;
|
std::vector<PDFReal> m_horizontalBreaks;
|
||||||
std::vector<PDFReal> m_verticalBreaks;
|
std::vector<PDFReal> m_verticalBreaks;
|
||||||
|
PageRotation m_rotation;
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Tool that makes screenshot of page area and copies it to the clipboard,
|
/// Tool that makes screenshot of page area and copies it to the clipboard,
|
||||||
|
|
Loading…
Reference in New Issue