Название: Разный viewport на разных принтерах Отправлено: juvf от Март 24, 2015, 08:17 Код: QPinter *printer = new QPinter(QPrinter::HighResolution); На разных принтерах разный вывод. Например при печати в пдф вывод такой Цитировать resol 1 = 600 при печати на принтер вывод такойpainter.viewport(): left = 0 rigth = 13698 top = 0 bottom = 9582 Цитировать resol 1 = 600 При печати на другой принтер вывод такойpainter.viewport(): left = 0 rigth = 7016 top = 0 bottom = 4957 Цитировать resol 1 = 1200 painter.viewport(): left = 0 rigth = 13698 top = 0 bottom = 9582 Соответственно если написать текст Код: QPainter.drawText(1000,3000, "Hello world!"); Почем так происходить и как это исправить? Как сделать, чтоб на всех принтерах QPainter рисовал одинаково? Название: Re: Разный viewport на разных принтерах Отправлено: qate от Март 24, 2015, 10:19 QPainter.drawText(rigth/2,bottom/2, "Hello world!"); - в центре листа
Название: Re: Разный viewport на разных принтерах Отправлено: juvf от Март 24, 2015, 11:34 да, так будет в центре листа. Мне нужно отступить от центра 10 см и вывести туда картинку. Как это сделать? Методом подбора вычислил, что 10 см - это к примеру 5900. Но на другом принтере 5900 - это не 10 см... картинка съехала.
пока сделал заплатку, пересчитал масштаб для координат и применяю его во всех координатах QPainter::draw.... Но это костыль какой-то. Название: Re: Разный viewport на разных принтерах Отправлено: qate от Март 24, 2015, 13:17 Мне нужно отступить от центра 10 см и вывести туда картинку. Как это сделать? размер листа известен, точек по высоте и ширине тоже известно, т.е. элементарно можно вычислить Название: Re: Разный viewport на разных принтерах Отправлено: juvf от Март 24, 2015, 17:22 размер листа известен, точек по высоте и ширине тоже известно, т.е. элементарно можно вычислить Ну я говорю, тут только на костылях. Цитировать пока сделал заплатку, пересчитал масштаб для координат и применяю его во всех координатах QPainter::draw.... Для каждого принтера свой размер точек для размера листа А4. А почему? я понимаю, если dpi 600 и dpi 1200 - тут по разрешению принтера можно определить кол-во точек. Но при одинаково разрешении разное кол-во точек.приходиться для каждого принтера нужно вводить свой поправочный коэфф и по нему пересчитывать размеры. ps. размер листа не известен. На одном принтере отступы от края 1 см, на другом 2 мм. Как получить в см размер области печати? Название: Re: Разный viewport на разных принтерах Отправлено: qate от Март 25, 2015, 08:46 Ну я говорю, тут только на костылях. ps. размер листа не известен. На одном принтере отступы от края 1 см, на другом 2 мм. Как получить в см размер области печати? принтеры не обязаны иметь одинаковое количество точек на А4 даже при 600dpi - тут все зависит от драйвера - как он сказал сколько точек будет, столько и будет и это правильно вычислять размер не по точкам, а относительно ширины и высоты костыль - это жестко привязаться к количеству точек "железные" отступы от края наверно qt не скажет, надо на уровне ОС искать Название: Re: Разный viewport на разных принтерах Отправлено: popper от Март 26, 2015, 12:16 Цитировать пока сделал заплатку, пересчитал масштаб для координат и применяю его во всех координатах QPainter::draw.... Для каждого принтера свой размер точек для размера листа А4. А почему? я понимаю, если dpi 600 и dpi 1200 - тут по разрешению принтера можно определить кол-во точек. Но при одинаково разрешении разное кол-во точек.приходиться для каждого принтера нужно вводить свой поправочный коэфф и по нему пересчитывать размеры. ps. размер листа не известен. На одном принтере отступы от края 1 см, на другом 2 мм. Как получить в см размер области печати? void QPrinter::getPageMargins(qreal * left, qreal * top, qreal * right, qreal * bottom, Unit unit) const void QPrinter::setPageMargins(qreal left, qreal top, qreal right, qreal bottom, Unit unit) Название: Re: Разный viewport на разных принтерах Отправлено: juvf от Апрель 01, 2015, 06:31 void QPrinter::getPageMargins(qreal * left, qreal * top, qreal * right, qreal * bottom, Unit unit) const void QPrinter::setPageMargins(qreal left, qreal top, qreal right, qreal bottom, Unit unit) Код:
Цитировать painter.viewport(): left = 0 Невзлетело ((rigth = 13565 top = 0 bottom = 9449 painter.window(): left = 0 rigth = 13565 top = 0 bottom = 9449 Название: Re: Разный viewport на разных принтерах Отправлено: popper от Апрель 02, 2015, 15:20 Код а у вас: Код
Наверное, нужно Код
Название: Re: Разный viewport на разных принтерах Отправлено: juvf от Апрель 07, 2015, 08:54 Наверное, нужно Да, у меня так и есть..... просто копипастил из разных мест, делал компактно... опечатался.Код
|