KD Reports  1.9
KDReportsReport.h
1 /****************************************************************************
2 **
3 ** This file is part of the KD Reports library.
4 **
5 ** SPDX-FileCopyrightText: 2007-2020 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
6 **
7 ** SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDAB-KDReports OR LicenseRef-KDAB-KDReports-US
8 **
9 ** Licensees holding valid commercial KD Reports licenses may use this file in
10 ** accordance with the KD Reports Commercial License Agreement provided with
11 ** the Software.
12 **
13 ** Contact info@kdab.com if any conditions of this licensing are not clear to you.
14 **
15 ****************************************************************************/
16 
17 #ifndef KDREPORTSREPORT_H
18 #define KDREPORTSREPORT_H
19 
20 #include "KDReportsErrorDetails.h"
21 #include "KDReportsGlobal.h"
22 #include <QtCore/QSizeF>
23 #include <QColor>
24 #include <QFont>
25 #include <QTextOption>
26 
27 #include <QtPrintSupport/QPrinter>
28 
29 QT_BEGIN_NAMESPACE
30 class QDomDocument;
31 class QTextDocumentFragment;
32 class QTextDocument;
33 class QDomElement;
34 class QDomNode;
35 class QAbstractItemModel;
36 class QIODevice;
37 class QRect;
38 class QPainter;
39 class ReportData;
40 class EditorData;
41 QT_END_NAMESPACE
42 
43 namespace KDReports {
44 
45 class MainTable;
46 class XmlParser;
47 class Element;
48 class HeaderReportBuilder;
49 class Header;
50 typedef Header Footer;
51 class ReportPrivate;
52 class ReportBuilder;
53 class TextDocument;
54 class TableBreakingSettingsDialog;
55 class AutoTableElement;
56 class XmlElementHandler;
57 
82  FirstPage = 1,
83  EvenPages = 2,
84  OddPages = 4,
85  LastPage = 8,
87 };
88 Q_DECLARE_FLAGS( HeaderLocations, HeaderLocation )
89 
90 
99 class KDREPORTS_EXPORT Report : public QObject
100 {
101  Q_OBJECT
102  Q_PROPERTY(QString documentName READ documentName WRITE setDocumentName)
103 
104 public:
109  explicit Report( QObject* parent = 0 );
113  ~Report() override;
114 
115  enum ReportMode {
116  WordProcessing = 0,
117  SpreadSheet = 1
118  };
119 
139  void setReportMode( ReportMode reportMode );
140 
145  ReportMode reportMode() const;
146 
151  void setDefaultFont( const QFont& font );
152 
157  QFont defaultFont() const;
158 
163 
171  void addInlineElement( const Element& element );
172 
187  void addElement( const Element& element, Qt::AlignmentFlag horizontalAlignment = Qt::AlignLeft,
188  const QColor& backgroundColor = QColor() );
189 
195  void addVerticalSpacing( qreal space );
196 
203  void addFragment( const QTextDocumentFragment& fragment );
204 
216  void addPageBreak();
217 
240 
246  QTextOption::Tab rightAlignedTab() const;
247 
254  QTextOption::Tab middleAlignedTab() const;
255 
261  void setParagraphMargins( qreal left, qreal top, qreal right, qreal bottom );
262 
268  void setPageSize( const QPrinter::PageSize& size );
269 
274  void setPaperSize( const QSizeF & paperSize, QPrinter::Unit unit );
275 
279  QPrinter::PageSize pageSize() const;
283  void setOrientation( QPrinter::Orientation orientation );
287  QPrinter::Orientation orientation() const;
288 
302  void setWidthForEndlessPrinter( qreal widthMM );
303 
307  void setMargins( qreal top, qreal left, qreal bottom, qreal right );
308 
313  void getMargins( qreal* top, qreal* left, qreal* bottom, qreal* right ) const;
314 
319  void setTopPageMargin( qreal top );
320 
325  qreal topPageMargins() const;
326 
331  void setLeftPageMargin( qreal left );
332 
337  qreal leftPageMargins() const;
338 
343  void setRightPageMargin( qreal right );
344 
349  qreal rightPageMargins() const;
350 
355  void setBottomPageMargin( qreal bottom );
356 
361  qreal bottomPageMargins() const;
362 
368  void setHeaderBodySpacing( qreal spacing );
369 
374  qreal headerBodySpacing() const;
375 
381  void setFooterBodySpacing( qreal spacing );
382 
387  qreal footerBodySpacing() const;
388 
405  Header& header( HeaderLocations hl = AllPages );
406 
414  Footer& footer( HeaderLocations hl = AllPages );
415 
422  void associateModel( const QString& modelKey, QAbstractItemModel* model );
423 
434  void associateTextValue( const QString& id, const QString& value );
435 
445  void associateImageValue( const QString& id, const QPixmap& value );
446 
460  void associateImageValue( const QString& id, const QImage& value );
461 
472  bool loadFromXML( QIODevice* iodevice, ErrorDetails* details = 0 );
473 
486  bool loadFromXML( const QDomDocument& doc, ErrorDetails* details = 0 );
487 
497 
504  void setCurrentRow( const QAbstractItemModel *model, int row );
505 
511  void setDocumentName( const QString &name );
512 
517  QString documentName() const;
518 
524  bool printWithDialog( QWidget* parent );
525 
538  bool print( QPrinter* printer, QWidget* parent = 0 );
539 
546  bool exportToFile( const QString& fileName, QWidget* parent = 0 );
547 
554  bool exportToImage( const QSize& size, const QString& fileName, const char* format );
555 
563  bool exportToHtml( const QString& fileName );
564 
570  void paintPage( int pageNumber, QPainter& painter );
571 
577  void setFirstPageNumber( int num );
578 
582  int firstPageNumber() const;
583 
587  int numberOfPages() const;
588 
612  void setTableBreakingEnabled( bool tableBreakingEnabled );
613 
619 
620  enum TableBreakingPageOrder { DownThenRight, RightThenDown };
621 
629  void setTableBreakingPageOrder( TableBreakingPageOrder pageOrder );
630 
635  TableBreakingPageOrder tableBreakingPageOrder() const;
636 
646  void setFontScalingFactor( qreal factor );
647 
652  qreal fontScalingFactor() const;
653 
676  void scaleTo( int numPagesHorizontally, int numPagesVertically );
677 
688 
694  void setFixedRowHeight( qreal mm );
695 
705 
712 
718  void regenerateAutoTableForModel( QAbstractItemModel* model );
719 
729  void setWatermarkText( const QString& text,
730  int rotation = 0,
731  const QColor& color = QColor( 204, 204, 204 ),
732  const QFont& font = QFont( QLatin1String( "Helvetica" ), 48 ) );
733 
737  QString watermarkText() const;
738 
742  int watermarkRotation() const;
743 
747  QColor watermarkColor() const;
748 
752  QFont watermarkFont() const;
753 
764  void setWatermarkPixmap( const QPixmap& pixmap, bool autoGrayOut = true );
765 
771  QPixmap watermarkPixmap() const;
772 
777  void setWatermarkImage( const QImage& image );
778 
783  QImage watermarkImage() const;
784 
789  KDReports::HeaderLocations headerLocation(Header* header) const;
790 
795  KDReports::HeaderLocations footerLocation(KDReports::Footer *footer) const;
796 
801  void setHeaderLocation(HeaderLocations hl, Header *header);
802 
807  void setFooterLocation(HeaderLocations hl, Footer *footer);
808 
812  QSizeF paperSize() const;
813 
817  void dump() const;
818 
822  int currentPosition() const;
823 
833  void beginEdit();
834 
842  void endEdit();
843 
844 private:
845  friend class Test;
846  friend class ::ReportData;
847  friend class ::EditorData;
848  KDReports::TextDocument& doc() const;
849 
850  QString asHtml() const;
851 
852  void setupPrinter( QPrinter* printer );
853 
854 private:
855  Q_DISABLE_COPY( Report )
856  friend class HeaderReportBuilder; // for headerChanged()
857  friend class ImageElement; // for textDocumentWidth()
858  friend class ChartElement; // for textDocumentWidth()
859  friend class XmlParser; // d->m_builder
860  friend class Header; // doc()
861  friend class PreviewDialogPrivate; // setupPrinter
862  friend class PreviewWidgetPrivate; // setupPrinter
863  friend class ReportPrivate; // setupPrinter
864  ReportPrivate* const d;
865 };
866 
867 }
868 
869 #endif /* KDREPORTSREPORT_H */
KDReports::Report::loadFromXML
bool loadFromXML(const QDomDocument &doc, ErrorDetails *details=0)
KDReports::Report::setPaperSize
void setPaperSize(const QSizeF &paperSize, QPrinter::Unit unit)
KDReports::Report::setFooterLocation
void setFooterLocation(HeaderLocations hl, Footer *footer)
KDReports::Report::associateImageValue
void associateImageValue(const QString &id, const QPixmap &value)
KDReports::Report::setHeaderBodySpacing
void setHeaderBodySpacing(qreal spacing)
KDReports::Report::watermarkFont
QFont watermarkFont() const
KDReports::Report::regenerateAutoTableForModel
void regenerateAutoTableForModel(QAbstractItemModel *model)
KDReports::Report::Report
Report(QObject *parent=0)
KDReports::Report::setWatermarkPixmap
void setWatermarkPixmap(const QPixmap &pixmap, bool autoGrayOut=true)
KDReports::Report::setDefaultFont
void setDefaultFont(const QFont &font)
KDReports::Report::beginEdit
void beginEdit()
KDReports::Report::setTableBreakingPageOrder
void setTableBreakingPageOrder(TableBreakingPageOrder pageOrder)
KDReports::Report::rightAlignedTab
QTextOption::Tab rightAlignedTab() const
KDReports::Report::footerLocation
KDReports::HeaderLocations footerLocation(KDReports::Footer *footer) const
KDReports::Report::addPageBreak
void addPageBreak()
KDReports::Report::setReportMode
void setReportMode(ReportMode reportMode)
KDReports::Report::paintPage
void paintPage(int pageNumber, QPainter &painter)
KDReports::Report::headerLocation
KDReports::HeaderLocations headerLocation(Header *header) const
KDReports::Report::setFontScalingFactor
void setFontScalingFactor(qreal factor)
Scale the fonts in the document by a given factor.
KDReports::Report::setHeaderLocation
void setHeaderLocation(HeaderLocations hl, Header *header)
KDReports::Report::topPageMargins
qreal topPageMargins() const
KDReports::Report::addInlineElement
void addInlineElement(const Element &element)
KDReports::Report::regenerateAutoTables
void regenerateAutoTables()
KDReports::Report::endEdit
void endEdit()
KDReports::Report::setBottomPageMargin
void setBottomPageMargin(qreal bottom)
KDReports::FirstPage
@ FirstPage
The first page of the report.
Definition: KDReportsReport.h:82
KDReports::Report::autoTableElements
QList< KDReports::AutoTableElement * > autoTableElements() const
QList
Definition: KDReportsAbstractTableElement.h:24
KDReports::Report::setMargins
void setMargins(qreal top, qreal left, qreal bottom, qreal right)
KDReports::Element
Definition: KDReportsElement.h:40
KDReports::Report::watermarkColor
QColor watermarkColor() const
KDReports::Report::maximumNumberOfPagesForVerticalScaling
int maximumNumberOfPagesForVerticalScaling() const
KDReports::Report::setCurrentRow
void setCurrentRow(const QAbstractItemModel *model, int row)
KDReports::Report::exportToFile
bool exportToFile(const QString &fileName, QWidget *parent=0)
KDReports::Report::setLeftPageMargin
void setLeftPageMargin(qreal left)
KDReports::XmlElementHandler
Definition: KDReportsXmlElementHandler.h:81
KDReports::Report
Definition: KDReportsReport.h:100
KDReports::Report::footer
Footer & footer(HeaderLocations hl=AllPages)
KDReports::Report::watermarkImage
QImage watermarkImage() const
KDReports::Report::setWatermarkImage
void setWatermarkImage(const QImage &image)
KDReports::Report::getMargins
void getMargins(qreal *top, qreal *left, qreal *bottom, qreal *right) const
KDReports::Report::firstPageNumber
int firstPageNumber() const
KDReports::Report::setXmlElementHandler
void setXmlElementHandler(KDReports::XmlElementHandler *handler)
KDReports::AllPages
@ AllPages
All pages (except first and last if FirstPage or LastPage have their own headers)
Definition: KDReportsReport.h:86
KDReports::Report::tableBreakingPageOrder
TableBreakingPageOrder tableBreakingPageOrder() const
KDReports::HeaderLocation
HeaderLocation
Definition: KDReportsReport.h:81
KDReports::EvenPages
@ EvenPages
The even pages of the report: 2, 4, 6 etc.
Definition: KDReportsReport.h:83
KDReports::Report::exportToHtml
bool exportToHtml(const QString &fileName)
KDReports::OddPages
@ OddPages
The odd pages of the report: 1 (unless FirstPage has its own header), 3, 5, 7 etc.
Definition: KDReportsReport.h:84
KDReports::Report::header
Header & header(HeaderLocations hl=AllPages)
KDReports::Report::~Report
~Report() override
KDReports::Report::setOrientation
void setOrientation(QPrinter::Orientation orientation)
KDReports::Report::watermarkText
QString watermarkText() const
KDReports::Report::footerBodySpacing
qreal footerBodySpacing() const
KDReports::Report::associateImageValue
void associateImageValue(const QString &id, const QImage &value)
KDReports::Report::loadFromXML
bool loadFromXML(QIODevice *iodevice, ErrorDetails *details=0)
KDReports::Report::numberOfPages
int numberOfPages() const
KDReports::Report::leftPageMargins
qreal leftPageMargins() const
KDReports::Report::setRightPageMargin
void setRightPageMargin(qreal right)
KDReports::Report::watermarkPixmap
QPixmap watermarkPixmap() const
KDReports::Report::setPageSize
void setPageSize(const QPrinter::PageSize &size)
KDReports::LastPage
@ LastPage
The last page of the report.
Definition: KDReportsReport.h:85
KDReports::Report::middleAlignedTab
QTextOption::Tab middleAlignedTab() const
KDReports::Report::setTabPositions
void setTabPositions(const QList< QTextOption::Tab > &tabs)
KDReports::ChartElement
Definition: KDReportsChartElement.h:40
KDReports::Report::addFragment
void addFragment(const QTextDocumentFragment &fragment)
KDReports::Report::orientation
QPrinter::Orientation orientation() const
KDReports::Report::addVerticalSpacing
void addVerticalSpacing(qreal space)
KDReports::Report::pageSize
QPrinter::PageSize pageSize() const
KDReports::Report::print
bool print(QPrinter *printer, QWidget *parent=0)
KDReports::Report::addElement
void addElement(const Element &element, Qt::AlignmentFlag horizontalAlignment=Qt::AlignLeft, const QColor &backgroundColor=QColor())
KDReports::Report::watermarkRotation
int watermarkRotation() const
KDReports::Report::setTopPageMargin
void setTopPageMargin(qreal top)
KDReports::Report::scaleTo
void scaleTo(int numPagesHorizontally, int numPagesVertically)
Ensure that the report fits into a number of pages.
KDReports::Report::isTableBreakingEnabled
bool isTableBreakingEnabled() const
KDReports::Report::headerBodySpacing
qreal headerBodySpacing() const
KDReports::Report::associateModel
void associateModel(const QString &modelKey, QAbstractItemModel *model)
KDReports::Report::setDocumentName
void setDocumentName(const QString &name)
KDReports::MainTable
Definition: KDReportsMainTable.h:45
KDReports::Report::associateTextValue
void associateTextValue(const QString &id, const QString &value)
KDReports::Report::bottomPageMargins
qreal bottomPageMargins() const
KDReports::Report::setTableBreakingEnabled
void setTableBreakingEnabled(bool tableBreakingEnabled)
Enable breaking of tables across multiple pages.
KDReports::Report::setFixedRowHeight
void setFixedRowHeight(qreal mm)
KDReports::Report::printWithDialog
bool printWithDialog(QWidget *parent)
KDReports::Report::rightPageMargins
qreal rightPageMargins() const
KDReports::ErrorDetails
Definition: KDReportsErrorDetails.h:31
KDReports::Report::setParagraphMargins
void setParagraphMargins(qreal left, qreal top, qreal right, qreal bottom)
KDReports::Report::defaultFont
QFont defaultFont() const
KDReports::Report::setWidthForEndlessPrinter
void setWidthForEndlessPrinter(qreal widthMM)
KDReports::Header
Definition: KDReportsHeader.h:49
KDReports::Report::setWatermarkText
void setWatermarkText(const QString &text, int rotation=0, const QColor &color=QColor(204, 204, 204), const QFont &font=QFont(QLatin1String("Helvetica"), 48))
KDReports::Report::fontScalingFactor
qreal fontScalingFactor() const
KDReports::ImageElement
Definition: KDReportsImageElement.h:36
KDReports::Report::maximumNumberOfPagesForHorizontalScaling
int maximumNumberOfPagesForHorizontalScaling() const
KDReports::Report::documentName
QString documentName() const
KDReports::Report::mainTable
MainTable * mainTable() const
KDReports
Definition: KDReportsAbstractTableElement.h:30
KDReports::Report::setFooterBodySpacing
void setFooterBodySpacing(qreal spacing)
KDReports::Report::setFirstPageNumber
void setFirstPageNumber(int num)
KDReports::Report::reportMode
ReportMode reportMode() const
KDReports::Report::exportToImage
bool exportToImage(const QSize &size, const QString &fileName, const char *format)

Klarälvdalens Datakonsult AB (KDAB)
"The Qt, C++ and OpenGL Experts"
https://www.kdab.com/

https://www.kdab.com/development-resources/qt-tools/kd-reports/