Найти - Пользователи
Полная версия: Python3+PyQt4. Как вывести текст на принтер, чтобы он располагался в строго указанных координатах и не был растровым?
Начало » GUI » Python3+PyQt4. Как вывести текст на принтер, чтобы он располагался в строго указанных координатах и не был растровым?
1
Pluto
Т.е. в итоге нужна распечатка на бланк. Текст должен попасть в нужные места на бумажном бланке.

Я попробовал сделать всё это посредством рисования на QPainter.
Создал класс на основе QLabel, в нём переопределил paintEvent.
Текст помещаю в painter посредством drawText

Но, когда делаешь QLabel.render(QPrinter) получаешь “лохматый” растровый текст на бумаге.

Подскажите, как сделать, чтобы текст печатался как вектор (вроде правильно называю), а не как растр. Может вообще стоит делать не через painter, а как-то по-другому?
doza_and
Pluto
Может вообще стоит делать не через painter, а как-то по-другому?
Вы совершенно правы. Решение давно известно LaTeX, PageMaker, Indesign. Scribus.
А уровень проблем можно оценить в https://habrahabr.ru/post/310344/
Pluto
Для моих целей - простейшая распечатка данных для бланка из одного листа - подошла вот такая конструкция.

Создаём сперва объект 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()
Может, кому сгодится сия информация.
Pluto
printPainter.setWindow(0, 0, 1000, 1000)

На разных принтерах (разных моделях) это значение нужно подгонять! Иначе текст печатается либо шире, либо уже.
От чего это зависит?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB