LCOV - code coverage report
Current view: top level - qtreportslib/converters - convertertopdf.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 29 33 87.9 %
Date: 2019-02-16 04:31:57 Functions: 7 7 100.0 %

          Line data    Source code
       1             : #include <QPdfWriter>
       2             : #include <QPainter>
       3             : #include "convertertoqwidget.hpp"
       4             : #include "convertertopdf.hpp"
       5             : 
       6             : namespace qtreports {
       7             :     namespace detail {
       8             : 
       9           5 :         ConverterToPDF::ConverterToPDF( const ReportPtr & report ) :
      10             :             m_report( report ),
      11           5 :             m_dpi( 600 ) {}
      12             : 
      13           5 :         ConverterToPDF::~ConverterToPDF() {}
      14             : 
      15           2 :         bool    ConverterToPDF::convert( const QString & path ) {
      16           2 :             return create( path );
      17             :         }
      18             : 
      19           1 :         void    ConverterToPDF::setDPI( int dpi )
      20             :         {
      21           1 :             m_dpi = dpi;
      22           1 :         }
      23             : 
      24           3 :         int     ConverterToPDF::getDPI() const
      25             :         {
      26           3 :             return m_dpi;
      27             :         }
      28             : 
      29           2 :         bool    ConverterToPDF::create( const QString & path ) {
      30           2 :             if( m_report.isNull() ) {
      31           0 :                 m_lastError = "Report is empty";
      32           0 :                 return false;
      33             :             }
      34             : 
      35           4 :             ConverterToQWidget converter( m_report );
      36           2 :             bool result = converter.convert( ConverterToQWidget::WidgetType::Report );
      37           2 :             if( !result ) {
      38           0 :                 m_lastError = "Cannot convert to QWidget: " + converter.getLastError();
      39           0 :                 return false;
      40             :             }
      41             : 
      42           4 :             auto widget = converter.getQWidget();
      43           2 :             widget->show();
      44           2 :             widget->hide();
      45           2 :             widget->resize( m_report->getSize() );
      46             : 
      47           4 :             QPdfWriter writer( path );
      48           2 :             writer.setCreator( "QReports Library" );
      49           2 :             writer.setTitle( m_report->getName() );
      50             : 
      51           4 :             QPainter painter( &writer );
      52             : 
      53             :             //Only for Qt 5.3+
      54             :             //auto pageSize = writer.pageLayout().pageSize();
      55             :             //auto size = pageSize.sizePixels( m_dpi );
      56             :             //auto sizeInch = pageSize.size( QPageSize::Unit::Inch );
      57             :             //widget->resize( sizeInch.width() * m_dpi, sizeInch.height() * m_dpi );
      58             :             //writer.setResolution( m_dpi );
      59             :             
      60             :             //Inch 2.54, A4 inch size 8.26 x 11.69
      61           2 :             qreal scale = 2 * 8.26;
      62             : 
      63             :             //widget->resize( widget->width(), rect.height() / scale );
      64           2 :             painter.scale( scale, scale );
      65             : 
      66             :             /*
      67             :             auto height = m_printedWidget->height() * scale;
      68             :             auto count = static_cast< int >( std::ceil( height / rect.height() ) );
      69             :             for( int i = 0; i < count; ++i )
      70             :             {
      71             :                 i != 0 ? printer->newPage() : 0;
      72             :                 m_printedWidget->render( &painter, QPoint( 0, -i * rect.height() / scale ) );
      73             :             }
      74             :             */
      75             : 
      76           2 :             widget->render( &painter );
      77             : 
      78           2 :             return true;
      79             :         }
      80             : 
      81           3 :         const QString   ConverterToPDF::getLastError() const {
      82           3 :             return m_lastError;
      83             :         }
      84             : 
      85             :     }
      86             : }

Generated by: LCOV version 1.13-24-g0433563