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.
  • M mrjj
    16 Nov 2018, 12:17

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

    T Offline
    T Offline
    TheCipo76
    wrote on 16 Nov 2018, 12:28 last edited by
    #7

    @mrjj Yes,
    with this code PDF was created

    1 Reply Last reply
    0
    • T TheCipo76
      16 Nov 2018, 12:13

      @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

      T Offline
      T Offline
      TheCipo76
      wrote on 16 Nov 2018, 15:46 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??

      M 1 Reply Last reply 16 Nov 2018, 16:12
      0
      • 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