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 9.7k 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.
  • 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
                                      • 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

                                          • Login

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