Автор: Rocky 25.3.2009, 19:48
Всем привет!
Не могу разобраться с выводом на печать. Есть функция QPainter::viewport которая вроде как возвращает область печати.
Пишу такой код:
m_pPrinter = new QPrinter();
m_pPrinter->setPaperSize(QPrinter::A4);
Затем создаю QPainter на основе этого принтера. Но на разных машинах QPainter::viewport возвращает разные значения. В результате, на одной машине все выводится на печать нормально, на другой - обрезаются края.... Как сделать, чтобы размеры области вывода на печать были одинаковые? Ведь А4 он и в африке А4. Пробовал делть отступы нулевые (margins) - не помогает. Все равно данные обрезаются... Кто-нить знает, что вообще возвращает viewport? мм, см, пиксели? Почему так получается что на листе размером 297х210 мм на одной машине влезает все, а на другой происходит обрез? Как бороться?
Та же хрень касается и и генерации pdf. Вроде заявлено что один и тот же код одинаково все выводит. На одной и той же машине печатаю - ок, генерю pdf - половина данных где-то в ауте (((
Спасибо...
Автор: BRE 25.3.2009, 19:58
Цитата(Rocky @ 25.3.2009, 19:48)
Кто-нить знает, что вообще возвращает viewport? мм, см, пиксели? Почему так получается что на листе размером 297х210 мм на одной машине влезает все, а на другой происходит обрез? Как бороться?
viewport возвращает размер в пикселях.
У разных принтеров, разное разрешение в точках (это параметр "Количество точек на дюйм" (DPI)).
Тебе нужно все маштабировать относительно этого dpi.
Посмотри на QPaintDevice, это базовый класс для QPrinter.
Он тебе сможет вернуть размеры в мм, ну и сами значения dpi.
Автор: Rocky 25.3.2009, 20:15
ага,....
А можно как-то "беболезненно" отмаштабировать всю страницу? В смысле чтобы все данные уместились на странице? или лучше играться dpi и подобрав нужный коэффициент, например, устанавливать соотвествующее dpi на всех машинах?
Автор: BRE 25.3.2009, 20:23
Цитата(Rocky @ 25.3.2009, 20:15)
ага,....
А можно как-то "беболезненно" отмаштабировать всю страницу? В смысле чтобы все данные уместились на странице? или лучше играться dpi и подобрав нужный коэффициент, например, устанавливать соотвествующее dpi на всех машинах?
Есть размер страницы в точках, есть размер в мм. Делим первое на второе - получаем коэффициент (количество точек в одном мм).
При формировании отчета все размеры задавай в мм, а для пересчета в точки умножай на получившийся коэффициент.
Автор: Rocky 26.3.2009, 14:59
С этим вроде разобрался... Все решилось проще: вызовом QPrinter::setFullPage(true). Теперь хоть одинаковость появилась.