У меня задача печатать данные в нужных местах на мелких клочках бумаги (80*118 мм).
Сейчас создаю принтер указываю ему размер листа, но ему по барабану и он все равно печатает как-будто у меня лист A4 и приходиться самому позиционироваться на виртуальном A4 под формат моего маленького листа.
Если выводить диалог печати и там создать свой формат листа и указать чтобы принтер его использовал, то печатает нормально, т.е. точка (0,0) это начало мелкого листка, а не A4 (внутри которого по середину уже мой мелкий) .
Так же, печать в PDF проходит нормально, формат листа мелкий.
Получается, от того что, я указываю размер бумаги смысла никакого нет
Хочется узнать как правильно печать и позиционировать текст на нестандартных размерах бумаги, чтобы можно было использовать простые конструкции вроде QPainter.drawText(x,y, QString("Текст"));?
Сейчас делаю вот так:
QPrinter printer;
printer.setPaperSize(QSizeF(80, 118), QPrinter::Millimeter);
printer.setOrientation (QPrinter::Portrait);
qDebug() << "Resolution:" << printer.resolution();
qDebug() << "Paper size:" << printer.paperSize() << printer.paperSize(QPrinter::Millimeter);
qDebug() << printer.width() << printer.height();
qDebug() << "Width, Height (mm):" << printer.widthMM() << printer.heightMM();
qDebug() << "Page rect:" << printer.pageRect();
qDebug() << "Paper rect:" << printer.paperRect();
QPainter painter;
painter.begin(&printer);
painter.setPen(Qt::black);
painter.setFont(QFont("Verdana", 10));
// рамка
painter.drawText(
(painter.paintEngine()->paintDevice()->logicalDpiX() * (210.0/2.0 - 80.0/2.0)) / 25.4,
(painter.paintEngine()->paintDevice()->logicalDpiY() * (297.0/2.0 - 118.0/2.0)) / 25.4,
QString("test")
);
// текст
painter.drawRect(
(painter.paintEngine()->paintDevice()->logicalDpiX() * (210.0/2.0 - 80.0/2.0)) / 25.4,
(painter.paintEngine()->paintDevice()->logicalDpiY() * (297.0/2.0 - 118.0/2.0)) / 25.4,
(painter.paintEngine()->paintDevice()->logicalDpiX() * 80) / 25.4,
(painter.paintEngine()->paintDevice()->logicalDpiY() * 118) / 25.4
);
painter.end();
вывод дебага:
Resolution: 96
Paper size: 30 QSizeF(80, 118)
302 446
Width, Height (mm): 80 118
Page rect: QRect(0,0 302x446)
Paper rect: QRect(0,0 302x446)