Printing big pages has been fixed

This commit is contained in:
arin.alex 2024-03-31 15:20:09 +03:00
parent 5139ac0ab0
commit e6321e36fb
4 changed files with 23 additions and 80 deletions

View File

@ -18,9 +18,12 @@ public:
virtual bool eof() = 0; virtual bool eof() = 0;
virtual QVariant data(const QString& columnName) = 0; virtual QVariant data(const QString& columnName) = 0;
virtual QVariant dataByRowIndex(const QString& columnName, int rowIndex) = 0; virtual QVariant dataByRowIndex(const QString& columnName, int rowIndex) = 0;
virtual QVariant dataByRowIndex(const QString &columnName, int rowIndex, int roleName) = 0;
virtual QVariant dataByRowIndex(const QString &columnName, int rowIndex, const QString &roleName) = 0;
virtual QVariant dataByKeyField(const QString& columnName, const QString& keyColumnName, QVariant keyData) = 0; virtual QVariant dataByKeyField(const QString& columnName, const QString& keyColumnName, QVariant keyData) = 0;
virtual int columnCount() = 0; virtual int columnCount() = 0;
virtual QString columnNameByIndex(int columnIndex) = 0; virtual QString columnNameByIndex(int columnIndex) = 0;
virtual QVariant headerData(const QString &columnName, const QString &roleName) = 0;
virtual int columnIndexByName(QString name) = 0; virtual int columnIndexByName(QString name) = 0;
virtual bool isInvalid() const = 0; virtual bool isInvalid() const = 0;
virtual QString lastError() = 0; virtual QString lastError() = 0;

View File

@ -29,8 +29,6 @@
****************************************************************************/ ****************************************************************************/
#include "lrpreviewreportwindow.h" #include "lrpreviewreportwindow.h"
#include "ui_lrpreviewreportwindow.h" #include "ui_lrpreviewreportwindow.h"
#include "serializators/lrxmlreader.h"
#include "serializators/lrxmlwriter.h"
#include "lrreportengine_p.h" #include "lrreportengine_p.h"
#include "lrpreviewreportwidget.h" #include "lrpreviewreportwidget.h"
#include "lrpreviewreportwidget_p.h" #include "lrpreviewreportwidget_p.h"
@ -179,7 +177,6 @@ PreviewReportWindow::~PreviewReportWindow()
{ {
if (m_ownedSettings) if (m_ownedSettings)
delete m_settings; delete m_settings;
//delete m_previewPage;
delete ui; delete ui;
} }
@ -266,17 +263,6 @@ QSettings*PreviewReportWindow::settings()
} }
} }
void PreviewReportWindow::setReportReader(ItemsReaderIntf::Ptr /*reader*/)
{
// m_reader=reader;
// if (!reader.isNull()){
// if (reader->first()) reader->readItem(m_previewPage->pageItem());
// int pagesCount = reader->firstLevelItemsCount();
// m_previewPage->pageItem()->setItemMode(PreviewMode);
// initPreview(pagesCount);
// }
}
void PreviewReportWindow::setPages(ReportPages pages) void PreviewReportWindow::setPages(ReportPages pages)
{ {
m_previewReportWidget->d_ptr->setPages(pages); m_previewReportWidget->d_ptr->setPages(pages);

View File

@ -62,7 +62,6 @@ class PreviewReportWindow : public QMainWindow
public: public:
explicit PreviewReportWindow(ReportEngine *report, QWidget *parent = 0, QSettings* settings=0, Qt::WindowFlags flags=Qt::WindowFlags()); explicit PreviewReportWindow(ReportEngine *report, QWidget *parent = 0, QSettings* settings=0, Qt::WindowFlags flags=Qt::WindowFlags());
~PreviewReportWindow(); ~PreviewReportWindow();
void setReportReader(ItemsReaderIntf::Ptr reader);
void setPages(ReportPages pages); void setPages(ReportPages pages);
void setDefaultPrinter(QPrinter* printer); void setDefaultPrinter(QPrinter* printer);
void exec(); void exec();

View File

@ -1818,7 +1818,7 @@ PrintProcessor::PrintProcessor(QPrinter* printer)
bool PrintProcessor::printPage(PageItemDesignIntf::Ptr page) bool PrintProcessor::printPage(PageItemDesignIntf::Ptr page)
{ {
#if (QT_VERSION < QT_VERSION_CHECK(5, 15, 1))
if (!m_firstPage && !m_painter->isActive()) return false; if (!m_firstPage && !m_painter->isActive()) return false;
PageDesignIntf* backupPage = dynamic_cast<PageDesignIntf*>(page->scene()); PageDesignIntf* backupPage = dynamic_cast<PageDesignIntf*>(page->scene());
@ -1836,91 +1836,47 @@ bool PrintProcessor::printPage(PageItemDesignIntf::Ptr page)
m_firstPage = false; m_firstPage = false;
} }
#if (QT_VERSION < QT_VERSION_CHECK(5, 15, 1))
qreal leftMargin, topMargin, rightMargin, bottomMargin; qreal leftMargin, topMargin, rightMargin, bottomMargin;
m_printer->getPageMargins(&leftMargin, &topMargin, &rightMargin, &bottomMargin, QPrinter::Millimeter); m_printer->getPageMargins(&leftMargin, &topMargin, &rightMargin, &bottomMargin, QPrinter::Millimeter);
QRectF printerPageRect = m_printer->pageRect(QPrinter::Millimeter);
printerPageRect = QRectF(0,0,(printerPageRect.size().width() + rightMargin + leftMargin) * page->unitFactor(),
(printerPageRect.size().height() + bottomMargin +topMargin) * page->unitFactor());
if (page->printBehavior() == PageItemDesignIntf::Split && m_printer->pageSize() != static_cast<QPrinter::PageSize>(page->pageSize()) &&
printerPageRect.width() < page->geometry().width())
{
qreal pageWidth = page->geometry().width();
qreal pageHeight = page->geometry().height();
QRectF currentPrintingRect = printerPageRect;
qreal curHeight = 0;
qreal curWidth = 0;
bool first = true;
while (pageHeight > 0){
while (curWidth < pageWidth){
if (!first) m_printer->newPage(); else first = false;
m_renderPage.render(m_painter, m_printer->pageRect(), currentPrintingRect);
currentPrintingRect.adjust(printerPageRect.size().width(), 0, printerPageRect.size().width(), 0);
curWidth += printerPageRect.size().width();
}
pageHeight -= printerPageRect.size().height();
curHeight += printerPageRect.size().height();
currentPrintingRect = printerPageRect;
currentPrintingRect.adjust(0, curHeight, 0, curHeight);
curWidth = 0;
}
} else {
if (page->getSetPageSizeToPrinter()){
QRectF source = page->geometry();
QSizeF inchSize = source.size() / (100 * 2.54);
QRectF target = QRectF(QPoint(0,0), inchSize * m_printer->resolution());
m_renderPage.render(m_painter, target, source);
} else {
m_renderPage.render(m_painter);
}
}
page->setPos(backupPagePos);
m_renderPage.removePageItem(page);
if (backupPage) backupPage->reactivatePageItem(page);
#else #else
if (!m_firstPage && !m_painter->isActive()) return false;
PageDesignIntf* backupPage = dynamic_cast<PageDesignIntf*>(page->scene());
QPointF backupPagePos = page->pos();
page->setPos(0,0);
m_renderPage.setPageItem(page);
m_renderPage.setSceneRect(m_renderPage.pageItem()->mapToScene(m_renderPage.pageItem()->rect()).boundingRect());
initPrinter(m_renderPage.pageItem());
if (!m_firstPage){
m_printer->newPage();
} else {
m_painter = new QPainter(m_printer);
if (!m_painter->isActive()) return false;
m_firstPage = false;
}
qreal leftMargin = m_printer->pageLayout().margins().left(); qreal leftMargin = m_printer->pageLayout().margins().left();
qreal topMargin = m_printer->pageLayout().margins().top(); qreal topMargin = m_printer->pageLayout().margins().top();
qreal rightMargin = m_printer->pageLayout().margins().right(); qreal rightMargin = m_printer->pageLayout().margins().right();
qreal bottomMargin = m_printer->pageLayout().margins().bottom(); qreal bottomMargin = m_printer->pageLayout().margins().bottom();
#endif
QRectF printerPageRect = m_printer->pageRect(QPrinter::Millimeter); QRectF printerPageRect = m_printer->pageRect(QPrinter::Millimeter);
printerPageRect = QRectF(0,0,(printerPageRect.size().width() + rightMargin + leftMargin) * page->unitFactor(), printerPageRect = QRectF(0,0,(printerPageRect.size().width() + rightMargin + leftMargin) * page->unitFactor(),
(printerPageRect.size().height() + bottomMargin + topMargin) * page->unitFactor()); (printerPageRect.size().height() + bottomMargin + topMargin) * page->unitFactor());
if (page->printBehavior() == PageItemDesignIntf::Split && m_printer->pageLayout().pageSize() != QPageSize((QPageSize::PageSizeId)page->pageSize()) && #if (QT_VERSION < QT_VERSION_CHECK(5, 15, 1))
if (page->printBehavior() == PageItemDesignIntf::Split &&
m_printer->pageSize() != static_cast<QPrinter::PageSize>(page->pageSize()) &&
printerPageRect.width() < page->geometry().width()) printerPageRect.width() < page->geometry().width())
{ {
#else
if (
page->printBehavior() == PageItemDesignIntf::Split &&
m_printer->pageLayout().pageSize() != QPageSize((QPageSize::PageSizeId)page->pageSize()) &&
printerPageRect.width() < page->geometry().width()
){
#endif
qreal pageWidth = page->geometry().width(); qreal pageWidth = page->geometry().width();
qreal pageHeight = page->geometry().height(); qreal pageHeight = page->geometry().height();
QRectF currentPrintingRect = printerPageRect;
qreal curHeight = 0; qreal curHeight = 0;
qreal curWidth = 0; qreal curWidth = 0;
QRectF currentPrintingRect = printerPageRect;
bool first = true; bool first = true;
while (pageHeight > 0){ while (pageHeight > 0){
while (curWidth < pageWidth){ while (curWidth < pageWidth){
if (!first) m_printer->newPage(); else first = false; if (!first) m_printer->newPage(); else first = false;
m_renderPage.render(m_painter, m_printer->pageRect(QPrinter::Millimeter), currentPrintingRect); m_renderPage.render(m_painter, QRectF(), currentPrintingRect);
currentPrintingRect.adjust(printerPageRect.size().width(), 0, printerPageRect.size().width(), 0);
curWidth += printerPageRect.size().width(); curWidth += printerPageRect.size().width();
currentPrintingRect = QRectF(
curWidth, 0,
printerPageRect.size().width() > (pageWidth - curWidth) ? (pageWidth - curWidth) : printerPageRect.size().width(), pageHeight
);
} }
pageHeight -= printerPageRect.size().height(); pageHeight -= printerPageRect.size().height();
@ -1943,7 +1899,6 @@ bool PrintProcessor::printPage(PageItemDesignIntf::Ptr page)
page->setPos(backupPagePos); page->setPos(backupPagePos);
m_renderPage.removePageItem(page); m_renderPage.removePageItem(page);
if (backupPage) backupPage->reactivatePageItem(page); if (backupPage) backupPage->reactivatePageItem(page);
#endif
return true; return true;
} }