Форум сайта python.su
Т.е. в итоге нужна распечатка на бланк. Текст должен попасть в нужные места на бумажном бланке.
Я попробовал сделать всё это посредством рисования на QPainter.
Создал класс на основе QLabel, в нём переопределил paintEvent.
Текст помещаю в painter посредством drawText
Но, когда делаешь QLabel.render(QPrinter) получаешь “лохматый” растровый текст на бумаге.
Подскажите, как сделать, чтобы текст печатался как вектор (вроде правильно называю), а не как растр. Может вообще стоит делать не через painter, а как-то по-другому?
Офлайн
PlutoВы совершенно правы. Решение давно известно LaTeX, PageMaker, Indesign. Scribus.
Может вообще стоит делать не через painter, а как-то по-другому?
Отредактировано doza_and (Июнь 25, 2017 15:37:41)
Офлайн
Для моих целей - простейшая распечатка данных для бланка из одного листа - подошла вот такая конструкция.
Создаём сперва объект QtGui.QPicture. В него рисуем всё что нам надо, а вот потом уж его подсовываем принтеру. И всё печатается чудненько, без лохматых шрифтов.
# моноширинный шрифт. Чтобы в клеточки на бланке буковки попадали myFont = QtGui.QFont() myFont.setFamily("Courier New") myFont.setLetterSpacing(QtGui.QFont.AbsoluteSpacing, 8) # межбуквенное расстояние = 8 myFont.setPointSize(18) # картинка для рисования pic = QtGui.QPicture() # объект-картинка picPainter = QtGui.QPainter() # объект для рисования picPainter.begin(pic) # начинаем рисовать на картинке picPainter.setFont(myFont) # устанавливаем шрифт picPainter.drawText(0, 0, "Текст для распечатывания на принтере") # координаты и выводимый текст на картинке picPainter.end() # закончили рисовать. Имеем картинку pic с нужным нам текстом. # теперь картинку отправляем на принтер printer = QtGui.QPrinter() # объект-принтер printPainter = QtGui.QPainter() # снова объект для рисования printPainter.begin(printer) # но "рисуем" теперь не по картинке, а, так сказать, по объекту-принтеру printPainter.setWindow(0, 0, 1000, 1000) # размер объекта для рисования. Чем больше указать значения, тем мельче на бумаге получатся распечатываемые данные (эдакое масштабирование страницы) printPainter.drawPicture(0, 0, pic) # выводим нашу картинку на принтер printPainter.end()
Офлайн
printPainter.setWindow(0, 0, 1000, 1000)
На разных принтерах (разных моделях) это значение нужно подгонять! Иначе текст печатается либо шире, либо уже.
От чего это зависит?
Офлайн