-
Bug
-
Resolution: Done
-
P2: Important
-
4.5.2
-
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;
}