mirror of
https://github.com/fralx/LimeReport.git
synced 2024-12-23 16:22:58 +03:00
Printing big pages has been fixed
This commit is contained in:
parent
5139ac0ab0
commit
e6321e36fb
@ -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;
|
||||||
|
@ -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);
|
||||||
|
@ -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();
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user