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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Печать QGraphicsScene и отступы при печати  (Прочитано 7894 раз)
nixman05
Гость
« : Декабрь 28, 2011, 22:42 »

В начале на сцену на сцену загружается QGraphicsPixmapItem, который содержит сканированный бланк отчета (формат A4).
Затем на сцену добавляется текст.
После формирования отчета в QGraphicsView видно, что размер сцены немного больше размера бланка.

Отчет, как сохраняется в pdf, так и печатается на принтере.
Сохранение в pdf реализовано следующим образом:
Код
C++ (Qt)
   QPrinter printer(QPrinter::HighResolution);
   printer.setPageSize(QPrinter::A4);
   printer.setOutputFormat(QPrinter::PdfFormat);
   printer.setOutputFileName(QString("./report.pdf"));
   printer.setPageMargins(0,0,0,0,QPrinter::Millimeter);
   QPainter painter(&printer);
   ui->view->scene()->render(&painter);
 
При этом размер  pdf  209,903 x 297,039 мм.


Вывод на печать реализован следующим образом
Код
C++ (Qt)
   QPrinter printer;
   if (QPrintDialog(&printer).exec() == QDialog::Accepted) {
       printer.setResolution(QPrinter::HighResolution);
       printer.setOutputFormat(QPrinter::NativeFormat);
       printer.setPageSize(QPrinter::A4);
       printer.setPaperSize(QSize(210,297),QPrinter::Millimeter);
       printer.setPageMargins(0,0,0,0,QPrinter::Millimeter);
       QPainter painter(&printer);
       painter.setRenderHint(QPainter::Antialiasing);
       ui->view->scene()->render(&painter);
    }
 
При этом документ уплывает вверх и немного в сторону. Внизу несколько сантиметров пустого поля, а также нижняя часть бланка не пропечатана на сантиметр. Правая часть бланка пропечатана правильно но сдвинута на некоторое расстояния.
Верх и левая пторона бланка уходят за границы страницы.

Как корректно отпечатать документ?
Записан
nixman05
Гость
« Ответ #1 : Декабрь 29, 2011, 19:07 »


Добавил вывод отладочной информации
Код
C++ (Qt)
       qDebug(qPrintable("Page Rect Width "+QString::number(printer.pageRect().width())+
                         " Height "+QString::number(printer.pageRect().height())));
       qDebug(qPrintable("Paper size in mm: Width "+QString::number(printer.paperSize(QPrinter::Millimeter).width())+
                         " Height "+QString::number(printer.paperSize(QPrinter::Millimeter).height())));
       qDebug(qPrintable("Paper Size in device: Width "+QString::number(printer.paperSize(QPrinter::DevicePixel).width())+
                         " Height "+QString::number(printer.paperSize(QPrinter::DevicePixel).height())));
 

В консоль выводится
Page Rect Width 17 Height 23
Paper size in mm: Width 210 Height 297
Paper Size in device: Width 16.5354 Height 23.3858

Почему  pageRect 17x23, а paperSize 16.5354x23.3858? Ведь поля заданы нулевые.

Также
Код
C++ (Qt)
ui->view->scene()->render(&painter, printer.pageRect(),
scene->sceneRect(), Qt::IgnoreAspectRatio /*Qt::KeepAspectRatio*/);
 
Не дает точного соответствия, независимо от AcpectRatio
Записан
nixman05
Гость
« Ответ #2 : Январь 18, 2012, 22:47 »

Вопрос все еще остается открытым.

Все таки непонятно:
 Есть сканированный бланк формата А-4;
 Данный бланк загружается на сцену(в качестве фона)
 Добавляются текстовые элементы
 Фон делается невидимым
 Сцена печатается на принтере
 
В результате текст выходит искаженным (и не попадает в поля бланка)

Может рисовать непосредственно на принтере?
Каким образом вывести текст в заданную координату (в миллиметрах)?


Записан
nixman05
Гость
« Ответ #3 : Январь 19, 2012, 12:35 »


Небольшое добавление

printer.logicalDpiX() : 2
printer.logicalDpiY) : 2
printer.physicalDpiX() : 600
printer.physicalDpiY() : 600

при эном, нескотря на то, что , как было указанно выше, было установлено printer.setPageSize(QPrinter::A4)
 widthMM() = 200 ,  heightMM() = 200. А если setFullPage установить в true, то они будут равны но 210.

Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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