Report ====== .. currentmodule:: axioma.render .. class:: Report План отчета для последующей печати. .. py:method:: Report(parent=None) Конструктор :param parent: Владелец элемента легенды. При удалении владельца так же удаляется и сам элемент :type parent: :class:`~PyQt5.QtCore.QObject` .. py:method:: setOptions(printer) Инициализация размеров страницы по переданному объекту принтера. :param printer: Объект принтера, по параметрам которого производится инициализация :type printer: :class:`~PyQt5.QtPrintSupport.QPrinter` .. py:method:: count() Количество элементов отчета в текущем отчете на данный момент :return: Количество :rtype: :class:`int` .. py:method:: addItem(item) Вставка нового элемента в отчет :param item: Вставляемый элемент :type item: :class:`ReportItem` .. py:method:: removeItem(index) Удаление элемента по его индексу. Если индекс корректен, элемент будет удален. :param index: Индекс удаляемого элемента :type index: :class:`int` .. py:method:: moveItem(item, index) Перемещение существующего элемента на новую позицию, если элемент и позиция указаны корректно :param item: Перемещаемый элемент :type item: :class:`ReportItem` :param index: Индекс, указывающий позицию, куда необходимо переместить элемент :type index: :class:`int` .. py:method:: removeItem(item) Удаление элемента из отчета :param item: Удаляемый элемент :type item: :class:`ReportItem` .. py:method:: insertItem(item, index) Вставка нового элемента в отчет на конкретную позицию. :param item: Вставляемый элемент отчета :type item: :class:`ReportItem` :param index: Индекс :type index: :class:`int` .. py:method:: index(item) Получение индекса элемента по значению :param item: Искомый элемент :type item: :class:`ReportItem` :return: Индекс искомого элемента, или же -1, если элемент не найден :rtype: :class:`int` .. py:method:: items() Получение текущего списка элементов отчета :return: Список с элементами отчета :rtype: :class:`list` [:class:`ReportItem`] .. py:method:: at(index) Получение элемента отчета по его индексу. :param index: Индекс :type index: :class:`int` :return: Элемент отчета. Возвращает None в случае, если не найдено :rtype: :class:`bool` .. py:method:: frontItem() Первый элемент отчета :return: Элемент отчета. Возвращает None в случае, если не найдено (отчет не содержит ни одного элемента) :rtype: :class:`ReportItem` .. py:method:: backItem() Последний элемент отчета :return: Элемент отчета. Возвращает None в случае, если не найдено (отчет не содержит ни одного элемента) :rtype: :class:`ReportItem` .. py:method:: rectContents() Ограничивающий прямоугольник по существующим в рамках отчета элементам отчета :return: Ограничивающий прямоугольник :rtype: :class:`~PyQt5.QtCore.QRectF` .. py:method:: rect() Ограничивающий прямоугольник общего пространства отчета. Здесь возвращается простое произведение размера одной страницы на их количество :return: Ограничивающий прямоугольник :rtype: :class:`~PyQt5.QtCore.QRectF` .. py:method:: render(context, excludes=[], pages=[]) Отрисовка отчета в заданном контексте :param context: Контекст, в котором будет отрисован отчет :type context: :class:`~axioma.render.Context` :param excludes: Элементы отчета, которые не будут отрисованы :type excludes: :class:`list` [:class:`ReportItem`] :param pages: Страницы, которые не будут отрисованы :type pages: :class:`list` [:class:`int`] .. py:method::hidden: render(const ReportItemWithContextList &items) .. py:method:: horisontalPagesCount() Количество страниц отчета по горизонтали :return: Количество страниц :rtype: :class:`int` .. py:method:: setHorisontalPagesCount(v) Установка количества страниц по горизонтали :param v: Новое количество страниц :type v: :class:`int` .. py:method:: verticalPageCount() Количество страниц отчета по вертикали :return: Количество страниц :rtype: :class:`int` .. py:method:: setVerticalPageCount(v) Установка количества страниц по вертикали :param v: Новое количество страниц :type v: :class:`int` .. py:method:: unit() Единицы измерения отчета, в которых хранятся элементы ReportItem :return: Единицы измерения отчета :rtype: :class:`Unit` .. py:method:: sizePage() Размеры одной страницы отчета :return: Размеры страницы :rtype: :class:`~PyQt5.QtCore.QSizeF` .. py:method:: name() Наименование отчета :return: Наименование :rtype: :class:`str` .. py:method:: setName(name) Задание нового значения наименования отчета :param name: Новое наименование отчета :type name: :class:`str` .. py:method:: fillOnPages() Максимально заполняет страницу(ы) отчета существующими элементами :return: False, если если ничего не делалось и контент не изменился. В противном случае True :rtype: :class:`bool` .. py:method:: coordSystem() Координатная система отчета :return: Координатная система отчета :rtype: :class:`~axioma.cs.CoordSystem` .. py:method:: dpiPrinter() Разрешение принтера. Инициализируется при передаче объекта принтера в метод setOptions :return: Разрешение принтера :rtype: :class:`int` .. method:: progress(value, total) [signal] Сигнал, возникающий при изменении прогресса выполнения :param value: Текущее значение :type value: :class:`int` :param total: Общее количество :type total: :class:`int` .. method:: needRedrawItem(rect) [signal] Сигнал, возникающий при необходимости перерисовки части отчета :param rect: Прямоугольник для обновления :type rect: :class:`~PyQt5.QtCore.QRectF` Пример использования: .. code-block:: python # Создание элемента отчета типа геометрический объект # Текст рассматиривается как геометрия. Пример создания см. style.py def createGeometryItem(report): print('Геометрия...') poly = QPolygonF(); poly << QPointF(20,20) << QPointF(80,50) << QPointF(120,20) << QPointF(320,320) << QPointF(120,180) << QPointF(20,20) geom = Polygon(cs_ne, poly) # Задание геометрии style = MapBasicStyle().styleFromString("Pen (1, 5, 16711935) Brush (8, 255, 16777215)") # Задание стиля оформления geomItem = GeometryReportItem(report) # Элемент отчета geomItem.setGeometry(geom) # Геометрия элемента в координатах отчета geomItem.setStyle(style) # Стиль оформления геометрии report.addItem(geomItem) # Добавляем в отчет # Создание контекста def createContext(painter): deviceRect = sceneRect = QRectF(0,0,100,100) viewport = Viewport (deviceRect,sceneRect) return Context(painter, viewport) def dumpReport(printer): try: report = Report(axioma.app.mainWindow) report.setHorisontalPagesCount(2) report.setVerticalPageCount(2) printer.setPaperSize(QPrinter.A4) report.setOptions(printer) printer.setOutputFormat(QPrinter.PdfFormat) # Pdf как выходной файл filename = QDir.temp().filePath('layout_out.pdf') # Имя выходного файла printer.setOutputFileName(filename) painter = QPainter(printer) context = createContext(painter) createGeometryItem(report) # Создание элемента отчета report.render(context) # Отрисовка print(QObject().tr("Элементов отчета:"), report.count()) print('Сохранено в файле ', filename) except Exception as ex: print(ex) #printer = QPrinter(QPrinter.HighResolution) # Создание принтера с высоким разрешением (1200dpi для Pdf или зависит от принтера) printer = QPrinter() #Создание принтера с обычным разрешением dumpReport(printer)