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.
  • A Offline
    A Offline
    Asperamanca
    wrote on last edited by
    #3

    @TheCipo76 said in Create a PDF from Qt Creator:

    setOutputFileName

    Interesting. I use the QPrinter way, and the only difference to my code I spotted was that I explicitly set the page margins and resolution. Also, I assume that you open the file for writing in your first code just as you do it in the second one, right?

    But try out the Text Edit example (in widgets\richtext) - it contains a PDF export.

    TheCipo76T 1 Reply Last reply
    0
    • jsulmJ jsulm

      @TheCipo76 Are you sure the PDF file was not created? You're using a relative path, that means the file will be created in current working directory.

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

      @jsulm i've searhced with finder and this is the result

      0_1542370138910_Schermata 2018-11-16 alle 13.08.09.png

      1 Reply Last reply
      0
      • A Asperamanca

        @TheCipo76 said in Create a PDF from Qt Creator:

        setOutputFileName

        Interesting. I use the QPrinter way, and the only difference to my code I spotted was that I explicitly set the page margins and resolution. Also, I assume that you open the file for writing in your first code just as you do it in the second one, right?

        But try out the Text Edit example (in widgets\richtext) - it contains a PDF export.

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

        @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

        mrjjM TheCipo76T 2 Replies Last reply
        0
        • 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

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

          @TheCipo76
          Hi
          Code does look fine.
          Could you try this sample ?
          https://wiki.qt.io/Exporting_a_document_to_PDF
          and see if you get pdf from that ?

          TheCipo76T 1 Reply Last reply
          0
          • mrjjM mrjj

            @TheCipo76
            Hi
            Code does look fine.
            Could you try this sample ?
            https://wiki.qt.io/Exporting_a_document_to_PDF
            and see if you get pdf from that ?

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

            @mrjj Yes,
            with this code PDF was created

            1 Reply Last reply
            0
            • 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

                                          • Login

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