Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-4445

Printing using the "Calibri" font cause characters to get jumbled up.

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: P2: Important P2: Important
    • 4.6.0
    • 4.5.2
    • GUI: Printing
    • None
    • da08f6864466c4c410e9d1a3995f36a3fee82891

      When printing to the Print Preview dialog or PDF, the results are always correct. However, when printing certain text to a real printer, some of the characters get jumbled up.

      Example Code:

      #include <QtGui/QApplication>
      #include <QtGui/QPrinter>
      #include <QtGui/QPrintDialog>
      #include <QtGui/QPainter>
      #include <QtGui/QFont>
      #include <QtCore/QDateTime>

      static QString m_client;
      static QString m_presenter;
      static QString m_preparer;
      static QString m_title;

      static void printHeaders(QPrinter &printer, QPainter &p, int num)
      {
      p.save();
      p.resetMatrix();
      p.resetTransform();

      p.setRenderHints(QPainter::Antialiasing |
      QPainter::TextAntialiasing |
      QPainter::SmoothPixmapTransform, true);

      QRect page = printer.pageRect();
      QRect paper = printer.paperRect();

      QRect hRect = QRect(0, 0, page.width(), page.top());
      QRect fRect = QRect(0, page.bottom(), page.width(), paper.bottom() - page.bottom());

      p.translate(0, -page.top());

      // draw logo
      #if 0
      int logoHeight = hRect.height() / 3;
      QSize logoSize = m_logo.size();
      logoSize.scale(hRect.width(), logoHeight, Qt::KeepAspectRatio);
      QRect logoRect = QStyle::alignedRect(Qt::LeftToRight, Qt::AlignLeft | Qt::AlignVCenter, logoSize, hRect);
      p.drawImage(logoRect, m_logo);
      #endif

      hRect.setTop(hRect.height() / 5);

      // date/time/page
      QStringList headerInfo;
      if (!m_client.isEmpty())
      headerInfo << m_client;
      if (!m_presenter.isEmpty())
      headerInfo << m_presenter;
      if (!m_preparer.isEmpty())
      headerInfo << "Prepared by " + m_preparer;

      QDateTime time = QDateTime::currentDateTime();
      headerInfo << time.toString();

      QString rightText = headerInfo.join("\n");

      p.setFont(QApplication::font());
      QRect textRect = p.fontMetrics().boundingRect(hRect, Qt::AlignRight | Qt::AlignTop, rightText);
      p.drawText(textRect, Qt::AlignRight | Qt::AlignTop, rightText);

      // footer
      p.drawText(fRect, Qt::AlignRight | Qt::AlignVCenter, QString::number(num + 1));

      // draw job title
      QFont titleFont = QApplication::font();
      titleFont.setBold(true);
      titleFont.setPointSize(titleFont.pointSize() + 4);
      p.setFont(titleFont);
      p.drawText(hRect, Qt::AlignCenter | Qt::AlignTop, m_title);

      p.restore();
      }

      int main(int argc, char *argv[])
      {
      QApplication a(argc, argv);
      QApplication::setFont(QFont("Calibri", 10));

      QPrinter printer(QPrinter::HighResolution);
      printer.setPaperSize(QPrinter::Letter);
      printer.setColorMode(QPrinter::Color);
      printer.setOrientation(QPrinter::Landscape);
      printer.setOutputFormat(QPrinter::NativeFormat);
      printer.setPageMargins(0.5f, 1.0f, 0.5f, 1.0f, QPrinter::Inch);
      printer.setDocName("Test Document");

      QPrintDialog dialog(&printer);

      m_title = "The Report";
      m_presenter = "Sean Canel & Matthew Friedman";
      m_preparer = "Maille Miller";

      if (dialog.exec() == QDialog::Accepted)

      { QPainter p; p.begin(&printer); printHeaders(printer, p, 0); p.end(); }

      return 0;
      }

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

            wallison Warwick Allison (closed Nokia identity) (Inactive)
            xcm Martin Petersson (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:

                There are no open Gerrit changes