0
0
mirror of https://github.com/fralx/LimeReport.git synced 2024-12-23 16:22:58 +03:00

Added the ability to add watermarks to all reports.

This commit is contained in:
Arin Alexander 2019-03-30 09:37:40 +03:00
parent f1701aabbd
commit f1f1e443ac
4 changed files with 292 additions and 0 deletions

View File

@ -61,6 +61,64 @@ private:
int m_toPage;
};
class LIMEREPORT_EXPORT ItemGeometry{
public:
enum Type{Milimeters, Pixels};
ItemGeometry(qreal x, qreal y, qreal width, qreal height, Type type = Milimeters)
:m_x(x), m_y(y), m_width(width), m_height(height), m_type(type){}
ItemGeometry(): m_x(0), m_y(0), m_width(0), m_height(0), m_type(Milimeters){}
qreal x() const;
void setX(const qreal &x);
qreal y() const;
void setY(const qreal &y);
qreal width() const;
void setWidth(const qreal &width);
qreal height() const;
void setHeight(const qreal &height);
Type type() const;
void setType(const Type &type);
private:
qreal m_x;
qreal m_y;
qreal m_width;
qreal m_height;
Type m_type;
};
class LIMEREPORT_EXPORT WatermarkSetting{
public:
WatermarkSetting(const QString& text, const ItemGeometry& geometry, const QFont& font)
: m_text(text), m_font(font), m_opacity(50), m_geomerty(geometry), m_color(QColor(Qt::black)){}
WatermarkSetting(): m_font(QFont()), m_opacity(50), m_geomerty(ItemGeometry()){}
QString text() const;
void setText(const QString &text);
QFont font() const;
void setFont(const QFont &font);
int opacity() const;
void setOpacity(const int &opacity);
ItemGeometry geomerty() const;
void setGeomerty(const ItemGeometry &geomerty);
QColor color() const;
void setColor(const QColor &color);
private:
QString m_text;
QFont m_font;
int m_opacity;
ItemGeometry m_geomerty;
QColor m_color;
};
class DataSourceManager;
class ReportEnginePrivate;
class PageDesignIntf;
@ -123,6 +181,8 @@ public:
ScaleType previewScaleType();
int previewScalePercent();
void setPreviewScaleType(const ScaleType &previewScaleType, int percent = 0);
void addWatermark(const WatermarkSetting& watermarkSetting);
void clearWatermarks();
signals:
void cleared();
void renderStarted();

View File

@ -939,6 +939,16 @@ void ReportEnginePrivate::setPreviewScaleType(const ScaleType &scaleType, int pe
m_previewScalePercent = percent;
}
void ReportEnginePrivate::addWatermark(const WatermarkSetting &watermarkSetting)
{
m_watermarks.append(watermarkSetting);
}
void ReportEnginePrivate::clearWatermarks()
{
m_watermarks.clear();
}
PageItemDesignIntf* ReportEnginePrivate::getPageByName(const QString& pageName)
{
foreach(PageItemDesignIntf* page, m_renderingPages){
@ -1152,6 +1162,38 @@ void ReportEnginePrivate::paintByExternalPainter(const QString& objectName, QPai
emit externalPaint(objectName, painter, options);
}
BaseDesignIntf* ReportEnginePrivate::createWatermark(PageDesignIntf* page, WatermarkSetting watermarkSetting)
{
QPointF pos;
QSizeF size;
switch (watermarkSetting.geomerty().type()) {
case ItemGeometry::Milimeters:
pos.setX(watermarkSetting.geomerty().x() * LimeReport::Const::mmFACTOR);
pos.setY(watermarkSetting.geomerty().y() * LimeReport::Const::mmFACTOR);
size.setWidth(watermarkSetting.geomerty().width() * LimeReport::Const::mmFACTOR);
size.setHeight(watermarkSetting.geomerty().height() * LimeReport::Const::mmFACTOR);
break;
case ItemGeometry::Pixels:
pos.setX(watermarkSetting.geomerty().x());
pos.setY(watermarkSetting.geomerty().y());
size.setWidth(watermarkSetting.geomerty().width());
size.setHeight(watermarkSetting.geomerty().height());
break;
}
BaseDesignIntf* watermark = page->addReportItem("TextItem",pos,size);
if (watermark){
watermark->setProperty("content", watermarkSetting.text());
watermark->setProperty("font",watermark->font());
watermark->setProperty("watermark",true);
watermark->setProperty("itemLocation",1);
watermark->setProperty("foregroundOpacity", watermarkSetting.opacity());
watermark->setProperty("fontColor", watermarkSetting.color());
}
return watermark;
}
ReportPages ReportEnginePrivate::renderToPages()
{
int startTOCPage = -1;
@ -1175,7 +1217,20 @@ ReportPages ReportEnginePrivate::renderToPages()
m_reportRender->setScriptContext(scriptContext());
m_renderingPages.clear();
foreach (PageDesignIntf* page, m_pages) {
QVector<BaseDesignIntf*> watermarks;
if (!m_watermarks.isEmpty()){
foreach(WatermarkSetting watermarkSetting, m_watermarks){
watermarks.append(createWatermark(page, watermarkSetting));
}
}
PageItemDesignIntf* rp = createRenderingPage(page->pageItem());
qDeleteAll(watermarks.begin(),watermarks.end());
watermarks.clear();
m_renderingPages.append(rp);
scriptContext()->baseDesignIntfToScript(rp->objectName(), rp);
}
@ -1457,6 +1512,18 @@ void ReportEngine::setPreviewScaleType(const ScaleType &previewScaleType, int pe
d->setPreviewScaleType(previewScaleType, percent);
}
void ReportEngine::addWatermark(const WatermarkSetting &watermarkSetting)
{
Q_D(ReportEngine);
d->addWatermark(watermarkSetting);
}
void ReportEngine::clearWatermarks()
{
Q_D(ReportEngine);
d->clearWatermarks();
}
void ReportEngine::setShowProgressDialog(bool value)
{
@ -1651,5 +1718,106 @@ void PrintProcessor::initPrinter(PageItemDesignIntf* page)
}
}
qreal ItemGeometry::x() const
{
return m_x;
}
void ItemGeometry::setX(const qreal &x)
{
m_x = x;
}
qreal ItemGeometry::y() const
{
return m_y;
}
void ItemGeometry::setY(const qreal &y)
{
m_y = y;
}
qreal ItemGeometry::width() const
{
return m_width;
}
void ItemGeometry::setWidth(const qreal &width)
{
m_width = width;
}
qreal ItemGeometry::height() const
{
return m_height;
}
void ItemGeometry::setHeight(const qreal &height)
{
m_height = height;
}
ItemGeometry::Type ItemGeometry::type() const
{
return m_type;
}
void ItemGeometry::setType(const Type &type)
{
m_type = type;
}
QString WatermarkSetting::text() const
{
return m_text;
}
void WatermarkSetting::setText(const QString &text)
{
m_text = text;
}
QFont WatermarkSetting::font() const
{
return m_font;
}
void WatermarkSetting::setFont(const QFont &font)
{
m_font = font;
}
int WatermarkSetting::opacity() const
{
return m_opacity;
}
void WatermarkSetting::setOpacity(const int &opacity)
{
m_opacity = opacity;
}
ItemGeometry WatermarkSetting::geomerty() const
{
return m_geomerty;
}
void WatermarkSetting::setGeomerty(const ItemGeometry &geomerty)
{
m_geomerty = geomerty;
}
QColor WatermarkSetting::color() const
{
return m_color;
}
void WatermarkSetting::setColor(const QColor &color)
{
m_color = color;
}
}// namespace LimeReport

View File

@ -61,6 +61,64 @@ private:
int m_toPage;
};
class LIMEREPORT_EXPORT ItemGeometry{
public:
enum Type{Milimeters, Pixels};
ItemGeometry(qreal x, qreal y, qreal width, qreal height, Type type = Milimeters)
:m_x(x), m_y(y), m_width(width), m_height(height), m_type(type){}
ItemGeometry(): m_x(0), m_y(0), m_width(0), m_height(0), m_type(Milimeters){}
qreal x() const;
void setX(const qreal &x);
qreal y() const;
void setY(const qreal &y);
qreal width() const;
void setWidth(const qreal &width);
qreal height() const;
void setHeight(const qreal &height);
Type type() const;
void setType(const Type &type);
private:
qreal m_x;
qreal m_y;
qreal m_width;
qreal m_height;
Type m_type;
};
class LIMEREPORT_EXPORT WatermarkSetting{
public:
WatermarkSetting(const QString& text, const ItemGeometry& geometry, const QFont& font)
: m_text(text), m_font(font), m_opacity(50), m_geomerty(geometry), m_color(QColor(Qt::black)){}
WatermarkSetting(): m_font(QFont()), m_opacity(50), m_geomerty(ItemGeometry()){}
QString text() const;
void setText(const QString &text);
QFont font() const;
void setFont(const QFont &font);
int opacity() const;
void setOpacity(const int &opacity);
ItemGeometry geomerty() const;
void setGeomerty(const ItemGeometry &geomerty);
QColor color() const;
void setColor(const QColor &color);
private:
QString m_text;
QFont m_font;
int m_opacity;
ItemGeometry m_geomerty;
QColor m_color;
};
class DataSourceManager;
class ReportEnginePrivate;
class PageDesignIntf;
@ -123,6 +181,8 @@ public:
ScaleType previewScaleType();
int previewScalePercent();
void setPreviewScaleType(const ScaleType &previewScaleType, int percent = 0);
void addWatermark(const WatermarkSetting& watermarkSetting);
void clearWatermarks();
signals:
void cleared();
void renderStarted();

View File

@ -217,6 +217,8 @@ public:
ScaleType previewScaleType();
int previewScalePercent();
void setPreviewScaleType(const ScaleType &previewScaleType, int percent = 0);
void addWatermark(const WatermarkSetting& watermarkSetting);
void clearWatermarks();
signals:
void pagesLoadFinished();
void datasourceCollectionLoadFinished(const QString& collectionName);
@ -303,6 +305,8 @@ private:
int m_previewScalePercent;
int m_startTOCPage;
QColor m_previewPageBackgroundColor;
QVector<WatermarkSetting> m_watermarks;
BaseDesignIntf *createWatermark(PageDesignIntf *page, WatermarkSetting watermarkSetting);
};
}