Шаг 299.
Библиотека PyQt5.
Печать документов. Основные средства печати. Класс QPrinter
На этом шаге мы рассмотрим назначение этого класса, иерархию наследования, формат конструктора и перечислим основные его методы.
Как уже говорилось, класс QPrinter представляет установленный в системе принтер. Его иерархия наследования такова:
QPaintDevice - QPagedPaintDevice - QPrinter
Конструктор класса
QPrinter имеет следующие форматы вызова:
<Объект> = QPrinter([mode=ScreenResolution])
<Объект> = QPrinter(<QPrinterInfo>[, mode=ScreenResolution])
Первый формат выбирает для печати принтер по умолчанию. В параметре mode может быть указано разрешение принтера, заданное в виде значения одного из следующих атрибутов класса
QPrinter:
- ScreenResolution (или 0) - разрешение экрана. Позволяет вывести документ максимально быстро, но в худшем качестве;
- HighResolution (или 2) - разрешение принтера. Печать выполняется качественнее, но медленнее.
Второй параметр позволяет выбрать произвольный принтер из числа установленных в системе. Этот принтер задается экземпляром класса QPrinterInfо, речь о котором пойдет ниже.
Класс QPrinter поддерживает очень много методов, из которых мы рассмотрим лишь наиболее полезные. Полный их список можно найти на странице
https://doc.qt.io/qt-5/qprinter.html:
- setPrinterName (<Имя принтера>) - выполняет подключение к принтеру с заданным в виде строки именем. Если передать пустую строку, будет выполнено подключение
к встроенной в PyQt подсистеме вывода документов в формате PDF;
- printerName () - возвращает строку с именем принтера, к которому выполнено подключение;
- setOutputFileName (<Путь к файлу>) - задает путь к файлу, в который будет выведен печатаемый документ (так называемая печать в файл). Если файл имеет расширение pdf,
будет выполнен вывод в формате PDF. В противном случае файл будет сохранен в формате, установленном в вызове метода setOutputFormat(). Чтобы отключить вывод документа в
файл, следует вызвать этот метод, передав ему в качестве параметра пустую строку;
- outputFileName () - возвращает путь к файлу, в который будет выведен документ вместо печати на бумаге;
- setOutputFormat (<Формат вывода>) - задает формат вывода документа при печати в файл. В качестве параметра передается значение одного из следующих атрибутов класса QPrinter:
- NativeFormat (или 0) - будет выполнен вывод во внутреннем формате принтера. Этот режим автоматически устанавливается при создании экземпляра класса QPrinter и
вызове метода setPrinterName() с указанием имени существующего принтера. Если экземпляр класса подключен к подсистеме вывода в формате PDF, будет выполнено
переподключение к принтеру по умолчанию;
- PdfFormat (или 1) - будет выполнен вывод в формате PDF. Этот режим автоматически
устанавливается при вызове метода setPrinterName() с указанием пустой строки;
- outputFormat () - возвращает обозначение формата вывода документа;
- isValid () - возвращает True, если принтер действительно установлен в системе и готов к работе, и False - в противном случае.
- setPageSize (<QPageSize>) - задает размер страницы в виде экземпляра класса QPageSize из модуля QtGui:
# Задаем размер бумаги А4
ps = QtGui.QPageSize(QtGui.QPageSize.A4)
printer.setPageSize(ps)
Возвращает True, если операция увенчалась успехом, и False - в противном случае;
- setPageOrientation (<Ориентация>) - задает ориентацию страницы в виде значения атрибута Portrait (0, портретная) или Landscape (l, ландшафтная) класса
QPageLayout из модуля QtGui. Возвращает True, если операция увенчалась успехом, и False - в противном случае;
- setPageMargins (<QMarginsF>[, <Единица измерения>]) - задает отступы от краев страницы в заданной единице измерения. Сами отступы указываются в виде экземпляра класса
QMarginsF из модуля QtCore. Единица измерения указывается в виде значения одного из следующих атрибутов класса QPageLayout:
- Millimeter (или 0) - миллиметры;
- Point (или 1) - пункты;
- Inch (или 2) - дюймы;
- Pica (или 3) - пики;
- Didot (или 4) - дидо (0,375 мм);
- Cicero (или 5) - цицеро (4,5 мм).
Возвращает True, если операция увенчалась успехом, и False - в противном случае. Пример:
# Задаем отступы в 5 мм со всех сторон страницы
m = QtCore.QMarginsF(5, 5, 5, 5)
printer.setPageMargins(m, QtGui.QPageLayout.Millimeter)
- setPageLayout (<QPageLayout>) - задает сразу все параметры страницы (размеры, ориентацию и отступы от краев страницы в виде экземпляра класса QPageLayout.
Возвращает True, если операция увенчалась успехом, и False - в противном случае;
- pageLayout () - возвращает экземпляр класса QPageLayout, хранящий сведения о размере бумаги, ориентации страницы и величинах отступов от краев страницы;
- setCopyCount (<Количество копий>) - задает количество копий печатаемого документа;
- copyCount () - возвращает количество копий печатаемого документа;
- setCollateCopies (<Флаг>) - если передано значение True, каждая копия документа будет отпечатана полностью, прежде чем начнется печать следующей копии. Если
передать значение False, сначала будут отпечатаны все копии первой страницы, потом все копии второй и т. д.;
- collateCopies () - возвращает True, если каждая копия документа печатается полностью, и False - в противном случае;
- setDuplex (<Режим двухсторонней печати>) - задает режим двусторонней печати в виде значения одного из следующих атрибутов класса QPrinter:
- DuplexNone (или 0) - односторонняя печать;
- DuplexAuto (или 1) - двусторонняя печать с автоматическим определением стороны листа, вокруг которой следует его перевернуть;
- DuplexLongSide (или 2) - двусторонняя печать с переворачиванием листа вокруг длинной стороны;
- DuplexShortSide (или 3) - двусторонняя печать с переворачиванием листа вокруг короткой стороны;
- duplex () - возвращает обозначение заданного для принтера режима двусторонней печати;
- setPrintRange (<Диапазон печати>) - задает диапазон печати документа в виде значения одного из следующих атрибутов класса QPrinter:
- AllPages (или 0) - печатать все страницы;
- Selection (или 1) - печатать только выделенный фрагмент;
- PageRange (или 2) - печатать только заданный диапазон страниц;
- CurrentPage (или 3) - печатать только текущую страницу;
- setFromTo (<Нaчaльнaя страница>, <Конечная страница>) - задает диапазон печатаемых страниц в документе;
- fromPage () - возвращает начальную страницу диапазона печати;
- toPage () - возвращает конечную страницу диапазона печати;
- setColorMode (<Цветовой режим>) - задает режим вывода цвета в виде значения атрибута Color (1, цветной) или Grayscale (0, черно-белый) класса QPrinter;
- colorMode () - возвращает обозначение режима вывода цвета, заданного для принтера;
- setResolution (<Paзрешение>) - задает разрешение для принтера в виде целого числа в точках на дюйм. Если указано неподдерживаемое значение разрешения, будет
выставлено разрешение, наиболее близкое к заданному;
- resolution () - возвращает заданное для принтера разрешение;
- setPaperSource (<Источник бумаги>) - задает источник бумаги для принтера в виде значения одного из следующих атрибутов класса QPrinter (здесь приведены лишь наиболее
часто используемые источники, полный их список доступен на странице
https://doc.qt.io/qt-5/qprinter.html#PaperSource-enum):
- OnlyOne (или 0) - единственный лоток принтера или лоток, используемый по умолчанию;
- Lower (или 1) - нижний лоток;
- Middle (или 2) - средний лоток;
- Manual (или 3) - лоток для ручной подачи бумаги;
- Envelope (или 4) - лоток для конвертов;
- EnvelopeManual (или 5) - лоток для ручной подачи конвертов;
- Auto (или 6) - автоматический выбор источника;
- paperSource () - возвращает обозначение источника бумаги;
- setFontEmbeddingEnabled (<Флаг>) - если передано значение True, в создаваемый документ PDF будут внедрены все использованные в его тексте шрифты,
если передано значение False - не будут;
- supportsMultipieCopies () - возвращает True, если принтер сам способен напечатать несколько копий документа, и False - в противном случае;
- supportedResolutions () - возвращает список разрешений, поддерживаемых принтером и измеряемых в точках на дюйм:
printer = QtPrintSupport.QPrinter()
for f in printer.supportedResolutions():
print(f, end=" ")
# Вывелось: 600
Как видно, принтер, установленный по умолчанию, поддерживает лишь разрешение 600 точек на дюйм.
На следующем шаге мы рассмотрим вывод на печать.
Предыдущий шаг
Содержание
Следующий шаг