Форум сайта python.su
2
Т.е. в итоге нужна распечатка на бланк. Текст должен попасть в нужные места на бумажном бланке.
Я попробовал сделать всё это посредством рисования на QPainter.
Создал класс на основе QLabel, в нём переопределил paintEvent.
Текст помещаю в painter посредством drawText
Но, когда делаешь QLabel.render(QPrinter) получаешь “лохматый” растровый текст на бумаге.
Подскажите, как сделать, чтобы текст печатался как вектор (вроде правильно называю), а не как растр. Может вообще стоит делать не через painter, а как-то по-другому?
Офлайн
253
PlutoВы совершенно правы. Решение давно известно LaTeX, PageMaker, Indesign. Scribus.
Может вообще стоит делать не через painter, а как-то по-другому?
Отредактировано doza_and (Июнь 25, 2017 15:37:41)
Офлайн
2
Для моих целей - простейшая распечатка данных для бланка из одного листа - подошла вот такая конструкция.
Создаём сперва объект 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()
Офлайн
2
printPainter.setWindow(0, 0, 1000, 1000)
На разных принтерах (разных моделях) это значение нужно подгонять! Иначе текст печатается либо шире, либо уже.
От чего это зависит?
Офлайн