Russian Qt Forum
Октябрь 02, 2024, 07:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Печать на нестандартных форматах бумаги.  (Прочитано 4954 раз)
AAS
Гость
« : Январь 14, 2011, 16:11 »

У меня задача печатать данные в нужных местах на мелких клочках бумаги (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)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.112 секунд. Запросов: 20.