Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Create a PDF from Qt Creator
QtWS25 Last Chance

Create a PDF from Qt Creator

Scheduled Pinned Locked Moved Solved General and Desktop
26 Posts 7 Posters 8.0k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • T TheCipo76
    16 Nov 2018, 15:46

    @TheCipo76

    when i launch pdf print in Application Output i saw this message:

    QPainter::begin(): Returned false
    QPainter::setPen: Painter not active
    QPainter::end: Painter not active, aborted

    Any suggestion to fix it??

    M Offline
    M Offline
    mrjj
    Lifetime Qt Champion
    wrote on 16 Nov 2018, 16:12 last edited by
    #9

    @TheCipo76
    Hi
    My guess would be that printer object goes out of scope ?

    T 1 Reply Last reply 16 Nov 2018, 16:20
    0
    • M mrjj
      16 Nov 2018, 16:12

      @TheCipo76
      Hi
      My guess would be that printer object goes out of scope ?

      T Offline
      T Offline
      TheCipo76
      wrote on 16 Nov 2018, 16:20 last edited by TheCipo76
      #10

      @mrjj i've tried with this code:

      qreal top=20, left=15, right=15, bottom=20;
          QPrinter printer(QPrinter::PrinterResolution);
          QPrintDialog dialog(&printer, this);
          if(dialog.exec() == QDialog::Accepted){
              QPrinterInfo pinfo(printer);
              qDebug() << "Printer valid: " << printer.isValid();
              qDebug() << "Printer Name: " << printer.printerName();
              qDebug() << "Printer program: " << printer.printProgram();
              qDebug() << "Is printer null: " << pinfo.isNull();
              qDebug() << "Printer State: " << pinfo.state();
              qDebug() << "Is printer default: " << pinfo.isDefault();
              qDebug() << "Is printer remote: " << pinfo.isRemote();
          }
          printer.setPaperSize(QPrinter::A4);
          printer.setPageMargins(left, top, right, bottom, QPrinter::Millimeter);
          printer.setOutputFormat(QPrinter::PdfFormat);
          printer.setOutputFileName("PrimoPDF.pdf");
      
          QPainter painter;
          if (! painter.begin(&printer)) { // failed to open file
              qWarning("failed to open file, is it writable?");
              return;
          }
          painter.drawText(10, 10, "Primo PDF Creato!");
          painter.drawText(10, 30, "Test 1");
          if (! printer.newPage()) {
              qWarning("failed in flushing page to disk, disk full?");
              return;
          }
          painter.drawText(10, 10, "Test 2");
          painter.end();
      

      and this is the result:

      Printer valid: true
      Printer Name: "Samsung_CLP_620_Series__SEC001599489B1A_"
      Printer program: ""
      Is printer null: false
      Printer State: 0
      Is printer default: true
      Is printer remote: false

      Printer seem to be OK

      now the previous message about QPainter were not showed..

      M 1 Reply Last reply 16 Nov 2018, 16:23
      0
      • T TheCipo76
        16 Nov 2018, 16:20

        @mrjj i've tried with this code:

        qreal top=20, left=15, right=15, bottom=20;
            QPrinter printer(QPrinter::PrinterResolution);
            QPrintDialog dialog(&printer, this);
            if(dialog.exec() == QDialog::Accepted){
                QPrinterInfo pinfo(printer);
                qDebug() << "Printer valid: " << printer.isValid();
                qDebug() << "Printer Name: " << printer.printerName();
                qDebug() << "Printer program: " << printer.printProgram();
                qDebug() << "Is printer null: " << pinfo.isNull();
                qDebug() << "Printer State: " << pinfo.state();
                qDebug() << "Is printer default: " << pinfo.isDefault();
                qDebug() << "Is printer remote: " << pinfo.isRemote();
            }
            printer.setPaperSize(QPrinter::A4);
            printer.setPageMargins(left, top, right, bottom, QPrinter::Millimeter);
            printer.setOutputFormat(QPrinter::PdfFormat);
            printer.setOutputFileName("PrimoPDF.pdf");
        
            QPainter painter;
            if (! painter.begin(&printer)) { // failed to open file
                qWarning("failed to open file, is it writable?");
                return;
            }
            painter.drawText(10, 10, "Primo PDF Creato!");
            painter.drawText(10, 30, "Test 1");
            if (! printer.newPage()) {
                qWarning("failed in flushing page to disk, disk full?");
                return;
            }
            painter.drawText(10, 10, "Test 2");
            painter.end();
        

        and this is the result:

        Printer valid: true
        Printer Name: "Samsung_CLP_620_Series__SEC001599489B1A_"
        Printer program: ""
        Is printer null: false
        Printer State: 0
        Is printer default: true
        Is printer remote: false

        Printer seem to be OK

        now the previous message about QPainter were not showed..

        M Offline
        M Offline
        mrjj
        Lifetime Qt Champion
        wrote on 16 Nov 2018, 16:23 last edited by
        #11

        @TheCipo76
        That looks very ok.
        But no PDF (PrimoPDF.pdf) is produced ?

        Have a look at this code. it prints screen shots.
        Looks very similar to yours.

        void printv2(QPixmap& pix) {
        
          QPrinter printer(QPrinter::HighResolution);
          printer.setOrientation(QPrinter::Landscape);
          printer.setOutputFormat(QPrinter::PdfFormat);
          printer.setPaperSize(QPrinter::A4);
          printer.setOutputFileName("e:/test.pdf");
        
          QPainter painter;
          painter.begin(&printer);
        
          double xscale = printer.pageRect().width() / double(pix.width());
          double yscale = printer.pageRect().height() / double(pix.height());
          double scale = qMin(xscale, yscale);
          painter.translate(printer.paperRect().x() + printer.pageRect().width() / 2,
                            printer.paperRect().y() + printer.pageRect().height() / 2);
          painter.scale(scale, scale);
          painter.translate(-pix.width() / 2, -pix.height() / 2);
          painter.drawPixmap(0, 0, pix);
          painter.end();
        
        }
        
        
        void MainWindow::on_pushButton_released() {
        
          QPixmap pix = QPixmap::grabWindow(QApplication::desktop()->winId());
          printv2(pix);
        
        }
        
        
        T 1 Reply Last reply 16 Nov 2018, 16:28
        0
        • M mrjj
          16 Nov 2018, 16:23

          @TheCipo76
          That looks very ok.
          But no PDF (PrimoPDF.pdf) is produced ?

          Have a look at this code. it prints screen shots.
          Looks very similar to yours.

          void printv2(QPixmap& pix) {
          
            QPrinter printer(QPrinter::HighResolution);
            printer.setOrientation(QPrinter::Landscape);
            printer.setOutputFormat(QPrinter::PdfFormat);
            printer.setPaperSize(QPrinter::A4);
            printer.setOutputFileName("e:/test.pdf");
          
            QPainter painter;
            painter.begin(&printer);
          
            double xscale = printer.pageRect().width() / double(pix.width());
            double yscale = printer.pageRect().height() / double(pix.height());
            double scale = qMin(xscale, yscale);
            painter.translate(printer.paperRect().x() + printer.pageRect().width() / 2,
                              printer.paperRect().y() + printer.pageRect().height() / 2);
            painter.scale(scale, scale);
            painter.translate(-pix.width() / 2, -pix.height() / 2);
            painter.drawPixmap(0, 0, pix);
            painter.end();
          
          }
          
          
          void MainWindow::on_pushButton_released() {
          
            QPixmap pix = QPixmap::grabWindow(QApplication::desktop()->winId());
            printv2(pix);
          
          }
          
          
          T Offline
          T Offline
          TheCipo76
          wrote on 16 Nov 2018, 16:28 last edited by
          #12

          @mrjj No, "PrimoPDF.pdf" wasn't created..

          the code you have posted is very similar..

          M 1 Reply Last reply 16 Nov 2018, 16:32
          0
          • T TheCipo76
            16 Nov 2018, 16:28

            @mrjj No, "PrimoPDF.pdf" wasn't created..

            the code you have posted is very similar..

            M Offline
            M Offline
            mrjj
            Lifetime Qt Champion
            wrote on 16 Nov 2018, 16:32 last edited by mrjj
            #13

            @TheCipo76
            Yep and i get a e:/test.pdf so not really sure why you dont get any.
            does it try to print to real printer ?

            Can you try

            void printv3() {
            
              QPrinter printer(QPrinter::HighResolution);
              printer.setOrientation(QPrinter::Landscape);
              printer.setOutputFormat(QPrinter::PdfFormat);
              printer.setPaperSize(QPrinter::A4);
              printer.setOutputFileName("test.pdf");
            
              QPainter painter;
              painter.begin(&printer);
            
              painter.drawText( 200,200, "HELLO" );
              painter.end();
            
            }
            
            

            That give me a test.pdf in the build folder
            alt text

            and expected result
            alt text

            T 1 Reply Last reply 16 Nov 2018, 16:44
            0
            • M mrjj
              16 Nov 2018, 16:32

              @TheCipo76
              Yep and i get a e:/test.pdf so not really sure why you dont get any.
              does it try to print to real printer ?

              Can you try

              void printv3() {
              
                QPrinter printer(QPrinter::HighResolution);
                printer.setOrientation(QPrinter::Landscape);
                printer.setOutputFormat(QPrinter::PdfFormat);
                printer.setPaperSize(QPrinter::A4);
                printer.setOutputFileName("test.pdf");
              
                QPainter painter;
                painter.begin(&printer);
              
                painter.drawText( 200,200, "HELLO" );
                painter.end();
              
              }
              
              

              That give me a test.pdf in the build folder
              alt text

              and expected result
              alt text

              T Offline
              T Offline
              TheCipo76
              wrote on 16 Nov 2018, 16:44 last edited by
              #14

              @mrjj i've tried with no luck

              test.pdf was not created..

              M 1 Reply Last reply 16 Nov 2018, 16:48
              0
              • T TheCipo76
                16 Nov 2018, 16:44

                @mrjj i've tried with no luck

                test.pdf was not created..

                M Offline
                M Offline
                mrjj
                Lifetime Qt Champion
                wrote on 16 Nov 2018, 16:48 last edited by
                #15

                @TheCipo76
                Really odd. I cant guess sorry. Sample works here.
                You use the code directly as is ?

                T 1 Reply Last reply 16 Nov 2018, 16:49
                0
                • M mrjj
                  16 Nov 2018, 16:48

                  @TheCipo76
                  Really odd. I cant guess sorry. Sample works here.
                  You use the code directly as is ?

                  T Offline
                  T Offline
                  TheCipo76
                  wrote on 16 Nov 2018, 16:49 last edited by TheCipo76
                  #16

                  @mrjj Yes, copied and pasted

                  QPrinter printer(QPrinter::HighResolution);
                        printer.setOrientation(QPrinter::Landscape);
                        printer.setOutputFormat(QPrinter::PdfFormat);
                        printer.setPaperSize(QPrinter::A4);
                        printer.setOutputFileName("test.pdf");
                  
                        QPainter painter;
                        painter.begin(&printer);
                  
                        painter.drawText( 200,200, "HELLO" );
                        painter.end();
                  
                  1 Reply Last reply
                  0
                  • M Offline
                    M Offline
                    mrjj
                    Lifetime Qt Champion
                    wrote on 16 Nov 2018, 16:50 last edited by
                    #17

                    and you also searched for test.pdf to make sure
                    its not created any where else ?

                    T 1 Reply Last reply 16 Nov 2018, 16:51
                    0
                    • M mrjj
                      16 Nov 2018, 16:50

                      and you also searched for test.pdf to make sure
                      its not created any where else ?

                      T Offline
                      T Offline
                      TheCipo76
                      wrote on 16 Nov 2018, 16:51 last edited by
                      #18

                      @mrjj 0_1542387108242_Schermata 2018-11-16 alle 17.51.36.png

                      M 1 Reply Last reply 16 Nov 2018, 16:55
                      0
                      • T TheCipo76
                        16 Nov 2018, 16:51

                        @mrjj 0_1542387108242_Schermata 2018-11-16 alle 17.51.36.png

                        M Offline
                        M Offline
                        mrjj
                        Lifetime Qt Champion
                        wrote on 16 Nov 2018, 16:55 last edited by
                        #19

                        @TheCipo76
                        Very odd.
                        Can you try this code. it let u select save location
                        if that dont work. something up with your Qt.

                        void printv4() {
                          QPrinter printer(QPrinter::HighResolution);
                          printer.setOrientation(QPrinter::Landscape);
                          printer.setOutputFormat(QPrinter::PdfFormat);
                          printer.setPaperSize(QPrinter::A4);
                          QString fileName = QFileDialog::getSaveFileName(0,"file", "c:\\", "pdf (*.pdf)");
                          printer.setOutputFileName(fileName);
                        
                          QPainter painter;
                          painter.begin(&printer);
                        
                          painter.drawText( 200,200, "HELLO" );
                          painter.end();
                        
                        }
                        
                        T 1 Reply Last reply 16 Nov 2018, 16:59
                        2
                        • M mrjj
                          16 Nov 2018, 16:55

                          @TheCipo76
                          Very odd.
                          Can you try this code. it let u select save location
                          if that dont work. something up with your Qt.

                          void printv4() {
                            QPrinter printer(QPrinter::HighResolution);
                            printer.setOrientation(QPrinter::Landscape);
                            printer.setOutputFormat(QPrinter::PdfFormat);
                            printer.setPaperSize(QPrinter::A4);
                            QString fileName = QFileDialog::getSaveFileName(0,"file", "c:\\", "pdf (*.pdf)");
                            printer.setOutputFileName(fileName);
                          
                            QPainter painter;
                            painter.begin(&printer);
                          
                            painter.drawText( 200,200, "HELLO" );
                            painter.end();
                          
                          }
                          
                          T Offline
                          T Offline
                          TheCipo76
                          wrote on 16 Nov 2018, 16:59 last edited by
                          #20

                          @mrjj

                          0_1542387477878_Schermata 2018-11-16 alle 17.57.19.png 0_1542387485333_Schermata 2018-11-16 alle 17.57.30.png

                          Finally works!!!!!! Great!!!
                          I don't know why but Works!!!!

                          Thank you very much!!

                          T 1 Reply Last reply 16 Nov 2018, 17:02
                          1
                          • T TheCipo76
                            16 Nov 2018, 16:59

                            @mrjj

                            0_1542387477878_Schermata 2018-11-16 alle 17.57.19.png 0_1542387485333_Schermata 2018-11-16 alle 17.57.30.png

                            Finally works!!!!!! Great!!!
                            I don't know why but Works!!!!

                            Thank you very much!!

                            T Offline
                            T Offline
                            TheCipo76
                            wrote on 16 Nov 2018, 17:02 last edited by
                            #21
                            This post is deleted!
                            1 Reply Last reply
                            0
                            • M Offline
                              M Offline
                              mrjj
                              Lifetime Qt Champion
                              wrote on 16 Nov 2018, 17:06 last edited by
                              #22

                              Super :)
                              So on mac it seems the file go somewhere else
                              if no path. maybe a read only place.
                              So when we tell the exact location , it does work :)

                              J.HilkJ 1 Reply Last reply 16 Nov 2018, 20:06
                              0
                              • M Offline
                                M Offline
                                mpergand
                                wrote on 16 Nov 2018, 19:30 last edited by mpergand
                                #23

                                @TheCipo76 said in Create a PDF from Qt Creator:

                                printer.setOutputFileName("PrimoPDF.pdf");

                                When launched from QtCreator, the default working directory is set to:
                                MyApp/Contents/MacOS/

                                When launched from the finder, the path is usely the user directory, but actualy it is the root directory (/) and obviously nothing is written (wrong permissions)

                                1 Reply Last reply
                                2
                                • M mrjj
                                  16 Nov 2018, 17:06

                                  Super :)
                                  So on mac it seems the file go somewhere else
                                  if no path. maybe a read only place.
                                  So when we tell the exact location , it does work :)

                                  J.HilkJ Offline
                                  J.HilkJ Offline
                                  J.Hilk
                                  Moderators
                                  wrote on 16 Nov 2018, 20:06 last edited by J.Hilk
                                  #24

                                  @mrjj said in Create a PDF from Qt Creator:

                                  Super :)
                                  So on mac it seems the file go somewhere else if no path

                                  IIRC the standard path is

                                  /Users/yourUserName/Library/Application Support


                                  Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                                  Q: What's that?
                                  A: It's blue light.
                                  Q: What does it do?
                                  A: It turns blue.

                                  1 Reply Last reply
                                  0
                                  • D Offline
                                    D Offline
                                    dan1973
                                    wrote on 27 Mar 2021, 10:47 last edited by
                                    #25

                                    Hi,

                                    I was following your comments and conversation. I need to know how to draw lines in PDF document using Qt.

                                    jsulmJ 1 Reply Last reply 29 Mar 2021, 04:57
                                    0
                                    • D dan1973
                                      27 Mar 2021, 10:47

                                      Hi,

                                      I was following your comments and conversation. I need to know how to draw lines in PDF document using Qt.

                                      jsulmJ Offline
                                      jsulmJ Offline
                                      jsulm
                                      Lifetime Qt Champion
                                      wrote on 29 Mar 2021, 04:57 last edited by
                                      #26

                                      @dan1973 said in Create a PDF from Qt Creator:

                                      I need to know how to draw lines in PDF document using Qt

                                      https://doc.qt.io/qt-5/qpainter.html#drawLine-2

                                      https://forum.qt.io/topic/113070/qt-code-of-conduct

                                      1 Reply Last reply
                                      1

                                      • Login

                                      • Login or register to search.
                                      • First post
                                        Last post
                                      0
                                      • Categories
                                      • Recent
                                      • Tags
                                      • Popular
                                      • Users
                                      • Groups
                                      • Search
                                      • Get Qt Extensions
                                      • Unsolved