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.3k 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

    @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