Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Python3+PyQt4. Как вывести текст на принтер, чтобы он располагался в строго указанных координатах и не был растровым? [RSS Feed]

#1 Июнь 25, 2017 14:30:35

Pluto
Зарегистрирован: 2012-05-29
Сообщения: 177
Репутация: +  1  -
Профиль   Отправить e-mail  

Python3+PyQt4. Как вывести текст на принтер, чтобы он располагался в строго указанных координатах и не был растровым?

Т.е. в итоге нужна распечатка на бланк. Текст должен попасть в нужные места на бумажном бланке.

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

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

Подскажите, как сделать, чтобы текст печатался как вектор (вроде правильно называю), а не как растр. Может вообще стоит делать не через painter, а как-то по-другому?

Офлайн

#2 Июнь 25, 2017 15:28:59

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Python3+PyQt4. Как вывести текст на принтер, чтобы он располагался в строго указанных координатах и не был растровым?

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



Отредактировано doza_and (Июнь 25, 2017 15:37:41)

Офлайн

#3 Июнь 25, 2017 20:15:34

Pluto
Зарегистрирован: 2012-05-29
Сообщения: 177
Репутация: +  1  -
Профиль   Отправить e-mail  

Python3+PyQt4. Как вывести текст на принтер, чтобы он располагался в строго указанных координатах и не был растровым?

Для моих целей - простейшая распечатка данных для бланка из одного листа - подошла вот такая конструкция.

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

Офлайн

#4 Июнь 30, 2017 18:38:49

Pluto
Зарегистрирован: 2012-05-29
Сообщения: 177
Репутация: +  1  -
Профиль   Отправить e-mail  

Python3+PyQt4. Как вывести текст на принтер, чтобы он располагался в строго указанных координатах и не был растровым?

printPainter.setWindow(0, 0, 1000, 1000)

На разных принтерах (разных моделях) это значение нужно подгонять! Иначе текст печатается либо шире, либо уже.
От чего это зависит?

Офлайн

  • Начало
  • » GUI
  • » Python3+PyQt4. Как вывести текст на принтер, чтобы он располагался в строго указанных координатах и не был растровым?[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version