Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Special Interest Groups
  3. C++ Gurus
  4. QPrint no possible to set page size and orientation (ubuntu 18.04)
Forum Updated to NodeBB v4.3 + New Features

QPrint no possible to set page size and orientation (ubuntu 18.04)

Scheduled Pinned Locked Moved Unsolved C++ Gurus
11 Posts 4 Posters 4.1k Views 1 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.
  • SGaistS Offline
    SGaistS Offline
    SGaist
    Lifetime Qt Champion
    wrote on last edited by
    #2

    hi,

    Did you try first setting the output format and then the other parameters ?

    By the way, since you are writing PDF files, you might want to check QPdfWriter.

    Interested in AI ? www.idiap.ch
    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

    gfxxG 1 Reply Last reply
    1
    • SGaistS SGaist

      hi,

      Did you try first setting the output format and then the other parameters ?

      By the way, since you are writing PDF files, you might want to check QPdfWriter.

      gfxxG Offline
      gfxxG Offline
      gfxx
      wrote on last edited by gfxx
      #3

      @SGaist said in QPrint no possible to set page size and orientation (ubuntu 18.04):

      Did you try first setting the output format and then the other parameters ?

      Yes, nothing changes ...... it seems that the settings are valid for the printed object but not for the paper on which it is printed .... I see the printed object oriented in landscape or in potrait if I change the setting, I see the resolution change, if I change the setting, I see the print size change if I change setpageSize, but the card always remains the same in every case: US Letter, vertical (216 × 279 mm).

      I'm frustrated ... I've been trying to get around this problem for 8 hours ...

      About QPdfWriter .... if I make a simple instance to QPdfWriter writer .... it doesn't change anything ....

      ---------UPDATE-------------------

      I try to renew the code to my original one, in these manner:

          QPrinter printer;
          printer.setPaperSize(QPrinter::A4);  //(QSizeF(210, 297), QPrinter::Millimeter);
          printer.setOrientation(QPrinter::Landscape);
          printer.setPageMargins(5, 5, 5, 5, QPrinter::Millimeter);
          printer.setColorMode(QPrinter::Color);
          printer.setResolution(600);
          printer.setFullPage(false);
      
          printer.setOutputFileName(resultString);
          printer.setOutputFormat(QPrinter::PdfFormat);
      
          qDebug() << "The new doc Layout is:   " << printer.pageLayout();  /* debug show correct layout */
      
      
          QImage img = qvariant_cast<QImage>(data);
          QImage imgS = img.scaled(7200, 3550, Qt::AspectRatioMode::KeepAspectRatioByExpanding);
      
                QPrintDialog *dlg = new QPrintDialog(&printer,nullptr);
                dlg->setOption(QAbstractPrintDialog::PrintToFile, true);
                if(dlg->exec() == QDialog::Accepted) {
                        QPainter painter(&printer);
                        painter.drawImage(QPoint(0,0),imgS);
                        painter.end();
      
                }
      
      
      }
      

      when the dialog box starts, I see the perfectly set printing options (A4 format, landscape, color, margins etc etc). I start printing and ... once again I get printing in US Letter, vertical (216 × 279 mm) that is very different fron that dialog show!!

      regards

      bkt

      JonBJ 1 Reply Last reply
      0
      • gfxxG gfxx

        @SGaist said in QPrint no possible to set page size and orientation (ubuntu 18.04):

        Did you try first setting the output format and then the other parameters ?

        Yes, nothing changes ...... it seems that the settings are valid for the printed object but not for the paper on which it is printed .... I see the printed object oriented in landscape or in potrait if I change the setting, I see the resolution change, if I change the setting, I see the print size change if I change setpageSize, but the card always remains the same in every case: US Letter, vertical (216 × 279 mm).

        I'm frustrated ... I've been trying to get around this problem for 8 hours ...

        About QPdfWriter .... if I make a simple instance to QPdfWriter writer .... it doesn't change anything ....

        ---------UPDATE-------------------

        I try to renew the code to my original one, in these manner:

            QPrinter printer;
            printer.setPaperSize(QPrinter::A4);  //(QSizeF(210, 297), QPrinter::Millimeter);
            printer.setOrientation(QPrinter::Landscape);
            printer.setPageMargins(5, 5, 5, 5, QPrinter::Millimeter);
            printer.setColorMode(QPrinter::Color);
            printer.setResolution(600);
            printer.setFullPage(false);
        
            printer.setOutputFileName(resultString);
            printer.setOutputFormat(QPrinter::PdfFormat);
        
            qDebug() << "The new doc Layout is:   " << printer.pageLayout();  /* debug show correct layout */
        
        
            QImage img = qvariant_cast<QImage>(data);
            QImage imgS = img.scaled(7200, 3550, Qt::AspectRatioMode::KeepAspectRatioByExpanding);
        
                  QPrintDialog *dlg = new QPrintDialog(&printer,nullptr);
                  dlg->setOption(QAbstractPrintDialog::PrintToFile, true);
                  if(dlg->exec() == QDialog::Accepted) {
                          QPainter painter(&printer);
                          painter.drawImage(QPoint(0,0),imgS);
                          painter.end();
        
                  }
        
        
        }
        

        when the dialog box starts, I see the perfectly set printing options (A4 format, landscape, color, margins etc etc). I start printing and ... once again I get printing in US Letter, vertical (216 × 279 mm) that is very different fron that dialog show!!

        regards

        JonBJ Online
        JonBJ Online
        JonB
        wrote on last edited by JonB
        #4

        @gfxx
        Can you print the PDF to file from that dialog? Assuming you can, you can examine it with a text editor. I presume you should see the layout/dimensions at the head of that file, what do they say? (Oh, I think your QAbstractPrintDialog::PrintToFile, true means you already do print to file? Tell us what it says about dimensions. But also, can you instead print to printer directly, does that come out wrong?) Does getting rid of printer.setFullPage(false); make any difference?

        Get rid of that large, scaled image. Try printing just Hello world. Are you saying that you always come out in US letter?

        To help yourself, you should do a bit of this detective work till you know what is or isn't necessary to show your issue.

        gfxxG 1 Reply Last reply
        0
        • JonBJ JonB

          @gfxx
          Can you print the PDF to file from that dialog? Assuming you can, you can examine it with a text editor. I presume you should see the layout/dimensions at the head of that file, what do they say? (Oh, I think your QAbstractPrintDialog::PrintToFile, true means you already do print to file? Tell us what it says about dimensions. But also, can you instead print to printer directly, does that come out wrong?) Does getting rid of printer.setFullPage(false); make any difference?

          Get rid of that large, scaled image. Try printing just Hello world. Are you saying that you always come out in US letter?

          To help yourself, you should do a bit of this detective work till you know what is or isn't necessary to show your issue.

          gfxxG Offline
          gfxxG Offline
          gfxx
          wrote on last edited by
          #5

          Are you saying that you always come out in US letter?

          @JonB these is the minor issue .... the major one is that is impossible to set A4 format horizontal .... Any how I try to explore my file with hello world print only.

          bkt

          JonBJ 1 Reply Last reply
          0
          • gfxxG gfxx

            Are you saying that you always come out in US letter?

            @JonB these is the minor issue .... the major one is that is impossible to set A4 format horizontal .... Any how I try to explore my file with hello world print only.

            JonBJ Online
            JonBJ Online
            JonB
            wrote on last edited by
            #6

            @gfxx
            What do you mean "is the minor issue"? It's precisely the problem you are reporting!

            Track down just exactly what is wrong when, e.g. "impossible to set A4 format horizontal" --- is it impossible to set A4 format generally, or only if it's horizontal? Help yourself by discovering the minimal necessary/sufficient conditions.

            1 Reply Last reply
            0
            • gfxxG Offline
              gfxxG Offline
              gfxx
              wrote on last edited by gfxx
              #7

              @JonB said in QPrint no possible to set page size and orientation (ubuntu 18.04):

              What do you mean "is the minor issue"? It's precisely the problem you are reporting!

              minor because I can always transform the image and adapt it to the page ....

              Track down just exactly what is wrong when, e.g. "impossible to set A4 format horizontal" --- is it impossible to set A4 format generally, or only if it's horizontal? Help yourself by discovering the minimal necessary/sufficient conditions.

              Impossible in any way ... just now i try these:

              #include "printe.h"
              #include <QPrinter>
              #include <QPainter>
              #include <QPrintDialog>
              #include <QPixmap>
              #include <QImage>
              #include <QTime>
              #include <QDate>
              #include <QDateTime>
              #include <QDebug>
              #include <QPdfWriter>
              #include <QPrintPreviewDialog>
              #include <QPrintEngine>
              #include <QPagedPaintDevice>
              #include <QPageLayout>
              #include <QPageSize>
              #include <QPaintEngine>
              #include <QPrintPreviewWidget>
              #include <QtPrintSupport>
              
              
              
              printe::printe()
              {
              
              }
              
              void printe::print(QVariant data, QString imgString)
              
              {
                  QString baseString = "/home/Desk/Doci/folder/";
                  QString resultString = "";
              
                  QDate cd = QDate::currentDate();
                  QTime ct = QTime::currentTime();
              
                  if(imgString.isEmpty()){
                      QString bDate = cd.toString()+ct.toString();
                      imgString = "DATA_"+bDate;
                      resultString = baseString+imgString+".pdf";
                  }
                  else{
                      resultString = baseString+imgString+".pdf";
                  }
              
                  qDebug() << resultString;
              
              
                  QPainter painter;
                  //painter.drawImage(QPoint(0,0),imgS);
              
                  printer = new QPrinter;
                  printer->setPdfVersion(QPrinter::PdfVersion_1_6);
                  printer->setPaperSize(QSizeF(210, 297), QPrinter::Millimeter);  //(QSizeF(210, 297), QPrinter::Millimeter);
                  printer->setPageOrientation(QPageLayout::Landscape);  /* I try with Potrait too */
                  printer->setPageMargins(5, 5, 5, 5, QPrinter::Millimeter);
                  printer->setColorMode(QPrinter::Color);
                  printer->setOutputFormat(QPrinter::PdfFormat);
                  printer->printEngine();
                  printer->setResolution(600);
                  printer->setFullPage(false);
                  printer->setOutputFileName(resultString);
              
              
                  qDebug() << "the new Layout is:   " << printer->pageLayout();
              
                  QImage img = qvariant_cast<QImage>(data);
                  QImage imgS = img.scaled(6912, 3408, Qt::AspectRatioMode::KeepAspectRatioByExpanding);
                  /*QPoint center = imgA.rect().center();
                  QMatrix matrix;
                  matrix.translate(center.x(), center.y());
                  matrix.rotate(90);
                  QImage imgS = imgA.transformed(matrix);*/
              
              
              
                  /*QPainter painter;
                  painter.drawImage(QPoint(0,0),imgS);*/
                  /*QPrintPreviewDialog *dlg = new QPrintPreviewDialog(printer, nullptr);
                  dlg->showMaximized();*/
                  //painter.end();
                  painter.begin(printer);
                  //painter.drawImage(QPoint(0,0),imgS);
                  painter.setFont(QFont("Arial",14));
                  painter.drawText(200,200,"Hello World");
                  painter.end();
              
              }
              

              Every time US letter format vertical ... in no way A4 both vertical and horizontal ....

              bkt

              JonBJ 1 Reply Last reply
              0
              • gfxxG gfxx

                @JonB said in QPrint no possible to set page size and orientation (ubuntu 18.04):

                What do you mean "is the minor issue"? It's precisely the problem you are reporting!

                minor because I can always transform the image and adapt it to the page ....

                Track down just exactly what is wrong when, e.g. "impossible to set A4 format horizontal" --- is it impossible to set A4 format generally, or only if it's horizontal? Help yourself by discovering the minimal necessary/sufficient conditions.

                Impossible in any way ... just now i try these:

                #include "printe.h"
                #include <QPrinter>
                #include <QPainter>
                #include <QPrintDialog>
                #include <QPixmap>
                #include <QImage>
                #include <QTime>
                #include <QDate>
                #include <QDateTime>
                #include <QDebug>
                #include <QPdfWriter>
                #include <QPrintPreviewDialog>
                #include <QPrintEngine>
                #include <QPagedPaintDevice>
                #include <QPageLayout>
                #include <QPageSize>
                #include <QPaintEngine>
                #include <QPrintPreviewWidget>
                #include <QtPrintSupport>
                
                
                
                printe::printe()
                {
                
                }
                
                void printe::print(QVariant data, QString imgString)
                
                {
                    QString baseString = "/home/Desk/Doci/folder/";
                    QString resultString = "";
                
                    QDate cd = QDate::currentDate();
                    QTime ct = QTime::currentTime();
                
                    if(imgString.isEmpty()){
                        QString bDate = cd.toString()+ct.toString();
                        imgString = "DATA_"+bDate;
                        resultString = baseString+imgString+".pdf";
                    }
                    else{
                        resultString = baseString+imgString+".pdf";
                    }
                
                    qDebug() << resultString;
                
                
                    QPainter painter;
                    //painter.drawImage(QPoint(0,0),imgS);
                
                    printer = new QPrinter;
                    printer->setPdfVersion(QPrinter::PdfVersion_1_6);
                    printer->setPaperSize(QSizeF(210, 297), QPrinter::Millimeter);  //(QSizeF(210, 297), QPrinter::Millimeter);
                    printer->setPageOrientation(QPageLayout::Landscape);  /* I try with Potrait too */
                    printer->setPageMargins(5, 5, 5, 5, QPrinter::Millimeter);
                    printer->setColorMode(QPrinter::Color);
                    printer->setOutputFormat(QPrinter::PdfFormat);
                    printer->printEngine();
                    printer->setResolution(600);
                    printer->setFullPage(false);
                    printer->setOutputFileName(resultString);
                
                
                    qDebug() << "the new Layout is:   " << printer->pageLayout();
                
                    QImage img = qvariant_cast<QImage>(data);
                    QImage imgS = img.scaled(6912, 3408, Qt::AspectRatioMode::KeepAspectRatioByExpanding);
                    /*QPoint center = imgA.rect().center();
                    QMatrix matrix;
                    matrix.translate(center.x(), center.y());
                    matrix.rotate(90);
                    QImage imgS = imgA.transformed(matrix);*/
                
                
                
                    /*QPainter painter;
                    painter.drawImage(QPoint(0,0),imgS);*/
                    /*QPrintPreviewDialog *dlg = new QPrintPreviewDialog(printer, nullptr);
                    dlg->showMaximized();*/
                    //painter.end();
                    painter.begin(printer);
                    //painter.drawImage(QPoint(0,0),imgS);
                    painter.setFont(QFont("Arial",14));
                    painter.drawText(200,200,"Hello World");
                    painter.end();
                
                }
                

                Every time US letter format vertical ... in no way A4 both vertical and horizontal ....

                JonBJ Online
                JonBJ Online
                JonB
                wrote on last edited by JonB
                #8

                @gfxx
                I suggested if you save to file that you examine the file to see what it has in it specifying layout/dimensions. I suggested some other thing to verify, like not going setFullPage(false), not including any image. It's up to you how much work you do to try to isolate the problem....

                gfxxG 1 Reply Last reply
                0
                • JonBJ JonB

                  @gfxx
                  I suggested if you save to file that you examine the file to see what it has in it specifying layout/dimensions. I suggested some other thing to verify, like not going setFullPage(false), not including any image. It's up to you how much work you do to try to isolate the problem....

                  gfxxG Offline
                  gfxxG Offline
                  gfxx
                  wrote on last edited by
                  #9

                  @JonB I try every things you suggest .... every time US vertical format .... I print only hello world ...ful page or not, color or not, with all my setting or without setting (so printer in default mode, I use only QT5.12 printer dialog) ... every time US vertical letter ......

                  regards

                  bkt

                  1 Reply Last reply
                  0
                  • gfxxG Offline
                    gfxxG Offline
                    gfxx
                    wrote on last edited by gfxx
                    #10

                    a completely new file ... but nothing change ........

                    testPrint.pro

                    #-------------------------------------------------
                    #
                    # Project created by QtCreator 2019-04-12T12:35:57
                    #
                    #-------------------------------------------------
                    
                    QT += core gui widgets
                    QT += printsupport
                    
                    
                    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
                    
                    TARGET = testPrinter
                    TEMPLATE = app
                    
                    # The following define makes your compiler emit warnings if you use
                    # any feature of Qt which has been marked as deprecated (the exact warnings
                    # depend on your compiler). Please consult the documentation of the
                    # deprecated API in order to know how to port your code away from it.
                    DEFINES += QT_DEPRECATED_WARNINGS
                    
                    # You can also make your code fail to compile if you use deprecated APIs.
                    # In order to do so, uncomment the following line.
                    # You can also select to disable deprecated APIs only up to a certain version of Qt.
                    #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
                    
                    CONFIG += c++11
                    
                    SOURCES += \
                            main.cpp \
                            mainwindow.cpp
                    
                    HEADERS += \
                            mainwindow.h
                    
                    FORMS += \
                            mainwindow.ui
                    
                    # Default rules for deployment.
                    qnx: target.path = /tmp/$${TARGET}/bin
                    else: unix:!android: target.path = /opt/$${TARGET}/bin
                    !isEmpty(target.path): INSTALLS += target
                    
                    

                    main.ccp

                    #include "mainwindow.h"
                    #include <QApplication>
                    
                    int main(int argc, char *argv[])
                    {
                        QApplication a(argc, argv);
                        MainWindow w;
                        w.show();
                    
                        return a.exec();
                    }
                    
                    

                    mainwindow.ccp

                    #include "mainwindow.h"
                    #include "ui_mainwindow.h"
                    #include <QPrinter>
                    #include <QPainter>
                    #include <QPrintDialog>
                    #include <QPixmap>
                    #include <QImage>
                    #include <QTime>
                    #include <QDate>
                    #include <QDateTime>
                    #include <QDebug>
                    #include <QPdfWriter>
                    #include <QPrintPreviewDialog>
                    #include <QPrintEngine>
                    #include <QPagedPaintDevice>
                    #include <QPageLayout>
                    #include <QPageSize>
                    #include <QPaintEngine>
                    #include <QPrintPreviewWidget>
                    #include <QtPrintSupport>
                    
                    MainWindow::MainWindow(QWidget *parent) :
                        QMainWindow(parent),
                        ui(new Ui::MainWindow)
                    {
                        ui->setupUi(this);
                    
                    
                    
                        printer = new QPrinter;
                    
                    
                        QPrintDialog *dlg = new QPrintDialog(printer, nullptr);
                    
                        dlg->setOption(QAbstractPrintDialog::PrintToFile, true);
                        dlg->addEnabledOption(QAbstractPrintDialog::PrintSelection);
                    
                        if(dlg->exec() == QDialog::Accepted) {
                            QPainter painter;
                            painter.begin(printer);
                            painter.setFont(QFont("Arial",14));
                            painter.drawText(20,20, ("some world"));
                            painter.end();
                        }
                    }
                    
                    MainWindow::~MainWindow()
                    {
                        delete ui;
                    }
                    
                    

                    so I add the image about Printer dialog after start up and after I choose Print to file:

                    0_1555066671065_printDialog1.png

                    an image of my printer choice:

                    0_1555066715727_printDialog2.png

                    and at last an image of my pint doc property:

                    0_1555066751348_printDialog3.png

                    So it seems that none of the options in the dialog box are taken into account ..... QPirint is a non free feature ??

                    Not see other ....

                    bkt

                    1 Reply Last reply
                    0
                    • fcarneyF Offline
                      fcarneyF Offline
                      fcarney
                      wrote on last edited by fcarney
                      #11

                      Ran your code on:

                      Ubuntu 18.04 64 bit
                      Qt 5.12.2
                      gcc
                      

                      I get paper and orientation outputs consistent with my selections. I tried 3 variations.
                      Edit:
                      Output: print to pdf

                      C++ is a perfectly valid school of magic.

                      1 Reply Last reply
                      2

                      • Login

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