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
Forum Updated to NodeBB v4.3 + New Features

Create a PDF from Qt Creator

Scheduled Pinned Locked Moved Solved General and Desktop
26 Posts 7 Posters 8.4k Views 4 Watching
  • 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.
  • TheCipo76T TheCipo76

    @Asperamanca
    No, i've followed a Video Tutorial and copy the same code
    (https://www.youtube.com/watch?v=lA5D8b_QPxo)

    the only differences is that i've done it in a Dialog and not in MainWindows

    i've already tried to create a new project and do it in MainWindows but the result is the same..

    No PDf was Created

    TheCipo76T Offline
    TheCipo76T Offline
    TheCipo76
    wrote on last edited by
    #8

    @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??

    mrjjM 1 Reply Last reply
    0
    • TheCipo76T TheCipo76

      @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??

      mrjjM Offline
      mrjjM Offline
      mrjj
      Lifetime Qt Champion
      wrote on last edited by
      #9

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

      TheCipo76T 1 Reply Last reply
      0
      • mrjjM mrjj

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

        TheCipo76T Offline
        TheCipo76T Offline
        TheCipo76
        wrote on 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..

        mrjjM 1 Reply Last reply
        0
        • TheCipo76T TheCipo76

          @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..

          mrjjM Offline
          mrjjM Offline
          mrjj
          Lifetime Qt Champion
          wrote on 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);
          
          }
          
          
          TheCipo76T 1 Reply Last reply
          0
          • mrjjM mrjj

            @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);
            
            }
            
            
            TheCipo76T Offline
            TheCipo76T Offline
            TheCipo76
            wrote on last edited by
            #12

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

            the code you have posted is very similar..

            mrjjM 1 Reply Last reply
            0
            • TheCipo76T TheCipo76

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

              the code you have posted is very similar..

              mrjjM Offline
              mrjjM Offline
              mrjj
              Lifetime Qt Champion
              wrote on 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

              TheCipo76T 1 Reply Last reply
              0
              • mrjjM mrjj

                @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

                TheCipo76T Offline
                TheCipo76T Offline
                TheCipo76
                wrote on last edited by
                #14

                @mrjj i've tried with no luck

                test.pdf was not created..

                mrjjM 1 Reply Last reply
                0
                • TheCipo76T TheCipo76

                  @mrjj i've tried with no luck

                  test.pdf was not created..

                  mrjjM Offline
                  mrjjM Offline
                  mrjj
                  Lifetime Qt Champion
                  wrote on last edited by
                  #15

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

                  TheCipo76T 1 Reply Last reply
                  0
                  • mrjjM mrjj

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

                    TheCipo76T Offline
                    TheCipo76T Offline
                    TheCipo76
                    wrote on 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
                    • mrjjM Offline
                      mrjjM Offline
                      mrjj
                      Lifetime Qt Champion
                      wrote on last edited by
                      #17

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

                      TheCipo76T 1 Reply Last reply
                      0
                      • mrjjM mrjj

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

                        TheCipo76T Offline
                        TheCipo76T Offline
                        TheCipo76
                        wrote on last edited by
                        #18

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

                        mrjjM 1 Reply Last reply
                        0
                        • TheCipo76T TheCipo76

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

                          mrjjM Offline
                          mrjjM Offline
                          mrjj
                          Lifetime Qt Champion
                          wrote on 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();
                          
                          }
                          
                          TheCipo76T 1 Reply Last reply
                          2
                          • mrjjM mrjj

                            @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();
                            
                            }
                            
                            TheCipo76T Offline
                            TheCipo76T Offline
                            TheCipo76
                            wrote on 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!!

                            TheCipo76T 1 Reply Last reply
                            1
                            • TheCipo76T TheCipo76

                              @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!!

                              TheCipo76T Offline
                              TheCipo76T Offline
                              TheCipo76
                              wrote on last edited by
                              #21
                              This post is deleted!
                              1 Reply Last reply
                              0
                              • mrjjM Offline
                                mrjjM Offline
                                mrjj
                                Lifetime Qt Champion
                                wrote on 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
                                0
                                • M Offline
                                  M Offline
                                  mpergand
                                  wrote on 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
                                  • mrjjM mrjj

                                    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 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 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
                                      0
                                      • D dan1973

                                        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 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