Beispiel #1
0
    def readData(self, data):
        """Restore saved settings from a dictionary.

        Arguments:
            data -- a dictionary of stored non-default settings
        """
        self.setDefaults()  # necessary for undo/redo
        self.drawLines = data.get('printlines', True)
        self.widowControl = data.get('printwidowcontrol', True)
        self.indentFactor = data.get('printindentfactor', 2.0)
        if 'printpapersize' in data:
            self.pageLayout.setPageSize(
                QPageSize(getattr(QPageSize, data['printpapersize'])))
            self.pageLayout.setMargins(QMarginsF(*(_defaultMargin, ) * 4))
        if 'printpaperwidth' in data and 'printpaperheight' in data:
            width = data['printpaperwidth']
            height = data['printpaperheight']
            self.pageLayout.setPageSize(
                QPageSize(QSizeF(width, height), QPageSize.Inch))
            self.pageLayout.setMargins(QMarginsF(*(_defaultMargin, ) * 4))
        if not data.get('printportrait', True):
            self.pageLayout.setOrientation(QPageLayout.Landscape)
        if 'printmargins' in data:
            margins = data['printmargins']
            self.pageLayout.setMargins(QMarginsF(*margins))
        self.headerMargin = data.get('printheadermargin', _defaultHeaderPos)
        self.footerMargin = data.get('printfootermargin', _defaultHeaderPos)
        self.numColumns = data.get('printnumcolumns', 1)
        self.columnSpacing = data.get('printcolumnspace', _defaultColumnSpace)
        self.headerText = data.get('printheadertext', '')
        self.footerText = data.get('printfootertext', '')
        if 'printfont' in data:
            self.useDefaultFont = False
            self.mainFont.fromString(data['printfont'])
        self.adjustSpacing()
Beispiel #2
0
    def checkPageLayout(self):
        """Check and set the page layout on the current printer.

        Verify that the layout settings match the printer, adjust if required.
        """
        if not self.printer.setPageLayout(self.pageLayout):
            tempPrinter = QPrinter()
            tempPageLayout = tempPrinter.pageLayout()
            tempPageLayout.setUnits(QPageLayout.Inch)
            pageSizeIssue = False
            defaultPageSize = tempPageLayout.pageSize()
            tempPageLayout.setPageSize(self.pageLayout.pageSize())
            if not tempPrinter.setPageLayout(tempPageLayout):
                pageSizeIssue = True
                tempPageLayout.setPageSize(defaultPageSize)
            marginIssue = not (tempPageLayout.setMargins(
                self.pageLayout.margins())
                               and tempPrinter.setPageLayout(tempPageLayout))
            if marginIssue:
                margin = 0.1
                while True:
                    if (tempPageLayout.setMargins(QMarginsF(*(margin, ) * 4))
                            and tempPrinter.setPageLayout(tempPageLayout)):
                        break
                    margin += 0.1
                newMargins = []
                for oldMargin in self.roundedMargins():
                    newMargins.append(
                        oldMargin if oldMargin >= margin else margin)
                tempPageLayout.setMargins(QMarginsF(*newMargins))
            tempPageLayout.setOrientation(self.pageLayout.orientation())
            self.printer.setPageLayout(tempPageLayout)
            if not pageSizeIssue and not marginIssue:
                return
            if pageSizeIssue and marginIssue:
                msg = _('Warning: Page size and margin settings unsupported '
                        'on current printer.\nSave page adjustments?')
            elif pageSizeIssue:
                msg = _('Warning: Page size setting unsupported '
                        'on current printer.\nSave adjustment?')
            else:
                msg = _('Warning: Margin settings unsupported '
                        'on current printer.\nSave adjustments?')
            ans = QMessageBox.warning(QApplication.activeWindow(), 'TreeLine',
                                      msg, QMessageBox.Yes | QMessageBox.No,
                                      QMessageBox.Yes)
            if ans == QMessageBox.Yes:
                self.pageLayout = tempPageLayout
Beispiel #3
0
    def __init__(self,
                 file_name,
                 card_format,
                 paper_format,
                 separation=[0.8, 0.8]):
        self.cardFormat = self.mm2pix(card_format)
        self.paperFormat = self.mm2pix(paper_format)
        self.separation = self.mm2pix(separation)
        self.paperFormatMM = paper_format
        self.file = QFile(str(file_name))
        self.file.open(QIODevice.WriteOnly)

        self.writer = QPdfWriter(self.file)
        self.writer.setResolution(self.RESOLUTION)
        self.writer.setPageSizeMM(QSizeF(*self.paperFormatMM))
        self.writer.setPageMargins(QMarginsF(0, 0, 0, 0))

        self.painter = QPainter(self.writer)
        self.pen = QPen()
        self.pen.setWidth(self.mm2pix([1])[0])
        self.painter.setPen(self.pen)

        self.bleeding = [0, 0]
        self.bleeding[0] = (self.paperFormat[0] %
                            int(self.cardFormat[0] + self.separation[0])) / 2
        self.bleeding[1] = (self.paperFormat[1] %
                            int(self.cardFormat[1] + self.separation[1])) / 2
        self.cursor = self.bleeding[:]

        self._setupPage()
Beispiel #4
0
def printPDF(url, margins):
    app = QtWidgets.QApplication(sys.argv)
    loader = QtWebEngineWidgets.QWebEngineView()
    loader.setZoomFactor(1)
    loader.load(QtCore.QUrl(url))

    layout = QPageLayout(
        QPageSize(QPageSize.A4), QPageLayout.Portrait,
        QMarginsF(margins[0], margins[1], margins[2], margins[3]))

    def printFinished():
        page = loader.page()
        page.profile().clearHttpCache()
        log("%s Printing Finished!" % page.title())
        app.exit()

    def printToPDF(finished):
        loader.show()
        page = loader.page()
        page.printToPdf("./pdfs/%s.pdf" % page.title(), layout)

    loader.page().pdfPrintingFinished.connect(printFinished)
    loader.loadFinished.connect(printToPDF)

    app.exec_()
    def __init__(self, filePath, parent=None):
        """
        Constructor
        
        @param filePath path of the file to write into
        @type str
        @param parent reference to the parent widget
        @type QWidget
        """
        super(PrintToPdfDialog, self).__init__(parent)
        self.setupUi(self)

        self.pdfFilePicker.setMode(E5PathPickerModes.SaveFileOverwriteMode)
        self.pdfFilePicker.setFilters(
            self.tr("PDF Files (*.pdf);;"
                    "All Files (*)"))
        if not os.path.isabs(filePath):
            documentsPath = QStandardPaths.writableLocation(
                QStandardPaths.DocumentsLocation)
            if documentsPath:
                filePath = os.path.join(documentsPath, filePath)
            else:
                filePath = os.path.abspath(filePath)
        self.pdfFilePicker.setText(filePath, toNative=True)

        self.__currentPageLayout = QPageLayout(QPageSize(QPageSize.A4),
                                               QPageLayout.Portrait,
                                               QMarginsF(0.0, 0.0, 0.0, 0.0))

        self.__updatePageLayoutLabel()
Beispiel #6
0
    def setMainPixmap(self, pixmap):
        self.mainPixmapItem.setPixmap(pixmap)

        # set scene rect
        boundingRect = self.mainPixmapItem.boundingRect()
        margin = 0
        boundingRect += QMarginsF(margin, margin, margin, margin)
        self.scene.setSceneRect(boundingRect)
Beispiel #7
0
 def load_finished(self):
     if self.do_preview:
         self.show()
     else:
         pageLayout = QPageLayout(QPageSize(QPageSize.A5),
                                  QPageLayout.Portrait,
                                  QMarginsF(0, 0, 0, 0))
         self.page().printToPdf(self.filename, pageLayout)
         self.page().pdfPrintingFinished.connect(on_pdf_finished)
Beispiel #8
0
 def _sceneRect(self):
     rect = self.scene().sceneRect()
     return rect.marginsAdded(
         QMarginsF(
             0.05 * rect.width(),
             0.05 * rect.height(),
             0.05 * rect.width(),
             0.05 * rect.height(),
         ))
Beispiel #9
0
    def reallocate_scene(self):
        self.scene = QGraphicsScene()

        self.view.setScene(self.scene)
        self.view.resetTransform()
        self.view.resetCachedContent()
        self.view.setSceneRect(QRectF())

        self.view.fitInView(self.scene.sceneRect().marginsAdded(QMarginsF(10, 10, 10, 10)), Qt.KeepAspectRatio)
Beispiel #10
0
    def paint(self, painter: QPainter, options, widget=None):
        painter.setBrush(QBrush(self.fill_color_current))
        painter.setPen(QPen(QColor(0, 0, 0, 0)))

        painter.drawRoundedRect(self.rect, 5, 5)

        if self.pixmap is not None:
            painter.drawPixmap(self.hor_margin * self.scaling, self.ver_margin * self.scaling, self.pixmap)
        if self.tooltip_shown:
            painter.setBrush(QBrush(QColor(50, 50, 50, 200)))
            painter.drawRoundedRect(self.tooltip.boundingRect().translated(self.tooltip.pos())
                                    .marginsAdded(QMarginsF(5, 0, 5, 0)), 5, 5)
Beispiel #11
0
    def __init__(self, label=""):
        QGraphicsEllipseItem.__init__(self)
        self.text = label

        self.textItem = GraphicsTextItem(self.text, parent=self)
        self.textItem.setTextInteractionFlags(Qt.TextEditorInteraction)

        self.setRect(self.textItem.boundingRect().marginsAdded(
            QMarginsF(10, 10, 10, 10)))
        self.setFlags(QGraphicsItem.ItemIsSelectable)

        self.observers = set()
        self.edgeInConstruction = None
Beispiel #12
0
 def scale_initializer_deffered_function():
     self.view.resetTransform()
     # print("size when loading: ", self.view.viewport().size())
     if self.slide_view_params.level_rect:
         # self.view.fitInView(QRectF(*self.slide_view_params.level_rect), Qt.KeepAspectRatioByExpanding)
         self.view.fitInView(QRectF(*self.slide_view_params.level_rect),
                             Qt.KeepAspectRatio)
         # print("after fit: ", self.get_current_view_scene_rect())
     else:
         start_margins = QMarginsF(200, 200, 200, 200)
         start_image_rect_ = self.slide_helper.get_rect_for_level(
             self.slide_view_params.level)
         self.view.fitInView(start_image_rect_ + start_margins,
                             Qt.KeepAspectRatio)
Beispiel #13
0
    def writePdf(self, name):
        pdfFile = QFile(name)
        #打开要写入的pdf文件
        pdfFile.open(QIODevice.WriteOnly)
        #创建pdf写入器
        pPdfWriter = QPdfWriter(pdfFile)
        #设置纸张为A4
        pPdfWriter.setPageSize(QPagedPaintDevice.A4)
        #设置纸张的分辨率为300,因此其像素为3508X2479
        pPdfWriter.setResolution(300)
        pPdfWriter.setPageMargins(QMarginsF(60, 60, 60, 60))
        pPdfPainter = QPainter(pPdfWriter)
        # 标题上边留白
        iTop = 100
        #文本宽度2100
        iContentWidth = 2100
        # 标,22号字
        font = QFont()
        font.setFamily("simhei.ttf")
        fontSize = 22
        font.setPointSize(fontSize)

        pPdfPainter.setFont(font)
        pPdfPainter.drawText(QRect(0, iTop, iContentWidth, 90),
                             Qt.AlignHCenter, "我是标题我骄傲")

        # 内容,16号字,左对齐
        fontSize = 16
        font.setPointSize(fontSize)
        pPdfPainter.setFont(font)

        iTop += 90
        pPdfPainter.drawText(QRect(0, iTop, iContentWidth, 60), Qt.AlignLeft,
                             "1、目录一")
        iTop += 90
        # 左侧缩进2字符
        iLeft = 120
        pPdfPainter.drawText(QRect(iLeft, iTop, iContentWidth - iLeft, 60),
                             Qt.AlignLeft, "我的目录一的内容。")
        iTop += 90
        pPdfPainter.drawText(QRect(0, iTop, iContentWidth, 60), Qt.AlignLeft,
                             "2、目录二")
        iTop += 90
        pPdfPainter.drawText(QRect(iLeft, iTop, iContentWidth - iLeft, 60),
                             Qt.AlignLeft, "我的目录一的内容")

        pPdfPainter.end()
        pdfFile.close()
Beispiel #14
0
 def __post_init__(self):
     # Scaling ratio for Qt point 72dpi -> constants.PRINT_DPI
     ratio = 72 / constants.PRINT_DPI
     super().__setattr__(
         "qt_object",
         QPageLayout(
             QPageSize(
                 QSize(
                     int(self.width.base_value * ratio),
                     int(self.height.base_value * ratio),
                 ),
             ),
             QPageLayout.Portrait,
             # Margins are implemented at a higher level
             QMarginsF(0, 0, 0, 0),
         ),
     )
Beispiel #15
0
 def setDefaults(self):
     """Set all paparmeters saved in TreeLine files to default values.
     """
     self.drawLines = True
     self.widowControl = True
     self.indentFactor = 2.0
     self.pageLayout.setUnits(QPageLayout.Inch)
     self.pageLayout.setPageSize(QPageSize(QPageSize.Letter))
     self.pageLayout.setOrientation(QPageLayout.Portrait)
     self.pageLayout.setMargins(QMarginsF(*(_defaultMargin, ) * 4))
     self.headerMargin = _defaultHeaderPos
     self.footerMargin = _defaultHeaderPos
     self.numColumns = 1
     self.columnSpacing = _defaultColumnSpace
     self.headerText = ''
     self.footerText = ''
     self.useDefaultFont = True
     self.setDefaultFont()
def generate_pdf(df_data):
    app = QtWidgets.QApplication(sys.argv)

    list_globalid = list(set(df_data['Global ID'].to_list()))
    print(list_globalid)

    for gid in list_globalid:
        html_file = 'P' + str(gid) + '.html'
        df_temp = df_data[df_data['Global ID'] == gid]
        df_temp.columns = set_columns()
        th_props = [('font-size', '8px'), ('text-align', 'center'),
                    ('font-weight', 'bold'), ('color', '#6d6d6d'),
                    ('background-color', '#f7f7f9')]
        td_props = [('font-size', '8px')]

        pd.set_option('colheader_justify', 'center')  # FOR TABLE <th>
        df_temp.to_html(html_file, index=False, justify='left', border="1")

        loader = QtWebEngineWidgets.QWebEngineView()
        loader.load(QtCore.QUrl(get_path() + html_file))

        layout = QPageLayout(QPageSize(QPageSize.A4), QPageLayout.Portrait,
                             QMarginsF(8, 12, 8, 12))

        def printFinished():
            page = loader.page()
            # print("%s Printing Finished!" % page.title())
            app.exit()

        def printToPDF(finished):
            loader.show()
            page = loader.page()
            page.printToPdf("%s.pdf" % page.title()[:9], layout)
            print("Generated pdf file %s.pdf" % page.title()[:9])

        loader.page().pdfPrintingFinished.connect(printFinished)
        loader.loadFinished.connect(printToPDF)

        app.exec_()
        loader.close()
    app.closeAllWindows()
    def update_view(self, steno_layout: StenoLayout, stroke: List[str]):
        ''' Updates the layout display for the provided layout and stroke '''

        scene = self.graphics_scene
        pen = self._scene_pen
        font = QFont(steno_layout.font) if steno_layout.font else QFont()
        # Clear all items from the scene. Could be more efficient...
        scene.clear()
        scene.setBackgroundBrush(QBrush(QColor(steno_layout.background_color)))

        for key in steno_layout.keys:
            path = LayoutDisplayView._create_key_path(steno_layout, key)
            brush = LayoutDisplayView._get_key_path_brush(key, (key.name in stroke))
            pen.setColor(QColor(key.stroke_color))

            # Add the key path before its label, then center the label
            scene.addPath(path, pen, brush)

            if key.label:
                label = QGraphicsTextItem(key.label)
                label.setFont(font)
                label.setDefaultTextColor(QColor(key.font_color))

                label_rect = label.boundingRect()
                label_rect.moveCenter(path.boundingRect().center())
                label.setPos(label_rect.x(), label_rect.y())
                scene.addItem(label)

        # Scene rects don't shrink when items are removed, so need to manually
        # set it to the current size needed by the contained items + margin
        margin = steno_layout.margin
        scene_rect = scene.itemsBoundingRect()
        scene_rect = scene_rect.marginsAdded(QMarginsF(margin, margin,
                                                       margin, margin))
        scene.setSceneRect(scene_rect)
        self.fitInView(scene.sceneRect(), Qt.KeepAspectRatio)

        self.setScene(scene)
        self.show()
Beispiel #18
0
    def get_new_scene_rect(self):
        first_pass = True

        for group in canvas.group_list:
            for widget in group.widgets:
                if widget is None or not widget.isVisible():
                    continue

                item_rect = widget.boundingRect().translated(widget.scenePos())
                item_rect = item_rect.marginsAdded(QMarginsF(50, 20, 50, 20))

                if first_pass:
                    full_rect = item_rect
                else:
                    full_rect = full_rect.united(item_rect)

                first_pass = False

        if not first_pass:
            return full_rect

        return QRectF()
Beispiel #19
0
	def savePdf(self):
		fileName = QFileDialog.getSaveFileName(self,
			self.tr("Export document to PDF"),
			self.currentTab.getBaseName() + ".pdf",
			self.tr("PDF files (*.pdf)"))[0]
		if fileName:
			if not QFileInfo(fileName).suffix():
				fileName += ".pdf"
			title, htmltext, preview = self.currentTab.getDocumentForExport()
			if globalSettings.useWebEngine and hasattr(preview.page(), "printToPdf"):
				pageSize = self.getPageSizeByName(globalSettings.paperSize)
				if pageSize is None:
					pageSize = QPageSize(QPageSize.A4)
				margins = QMarginsF(20, 20, 13, 20)  # left, top, right, bottom (in millimeters)
				layout = QPageLayout(pageSize, QPageLayout.Portrait, margins, QPageLayout.Millimeter)
				preview.page().printToPdf(fileName, layout)  # Available since Qt 5.7
				return
			printer = self.standardPrinter(title)
			printer.setOutputFormat(QPrinter.PdfFormat)
			printer.setOutputFileName(fileName)
			document = self.getDocumentForPrint(title, htmltext, preview)
			if document != None:
				document.print(printer)
Beispiel #20
0
 def adjust_view_to_fit(self):
     viewOrigin = self.view.rect().topLeft()
     sceneOrigin = self.view.mapFromScene(self.scene.sceneRect().translated(-15, -15).topLeft())
     if viewOrigin.x() >= sceneOrigin.x() or viewOrigin.y() >= sceneOrigin.y():
         #self.view.fitInView(QRectF(0, 0, 50, 50).united(self.scene.sceneRect().marginsAdded(QMarginsF(100, 100, 100, 100))), Qt.KeepAspectRatio)
         self.view.fitInView(self.scene.sceneRect().marginsAdded(QMarginsF(50, 50, 50, 50)), Qt.KeepAspectRatio)
Beispiel #21
0
 def wideRect(self, width=10) -> QRectF:
     rect = self.boundingRect(border=False)
     return rect.marginsAdded(QMarginsF(*[width] * 4))
Beispiel #22
0
    def paint(self, painter: QPainter, option: QStyleOptionGraphicsItem,
              widget: Optional[PyQt5.QtWidgets.QWidget] = ...):
        painter.setPen(QPen(self.current_color, 1.0))

        brush = QBrush(self.current_highlight_color)
        pen = QPen(brush, 4)
        painter.setPen(pen)
        if self.highlighted:
            painter.fillRect(self.boundingRect(), QBrush(self.current_highlight_color))

        if self.frame_color is not None and self.mode != StickMode.Edit and self.mode != StickMode.EditDelete:
            painter.setPen(QPen(self.frame_color, 4))
            painter.drawRect(self.boundingRect())

        pen = QPen(QColor(0, 255, 0, 255))

        pen.setWidth(1.0)
        pen.setColor(QColor(255, 0, 255, 255))
        pen.setStyle(Qt.DotLine)
        painter.setPen(pen)
        off = 10
        painter.drawLine(self.line.p1() - QPointF(0, off), self.line.p1() + QPointF(0, off))
        painter.drawLine(self.line.p1() - QPointF(off, 0), self.line.p1() + QPointF(off, 0))
        painter.drawLine(self.line.p2() - QPointF(0, off), self.line.p2() + QPointF(0, off))
        painter.drawLine(self.line.p2() - QPointF(off, 0), self.line.p2() + QPointF(off, 0))
        pen.setStyle(Qt.SolidLine)
        pen.setColor(QColor(0, 255, 0, 255))
        painter.setPen(pen)

        if self.mode != StickMode.EditDelete:
            pen.setWidth(2.0)
            br = painter.brush()
            painter.setPen(pen)
            painter.drawEllipse(self.line.p1(), 10, 10)
            painter.drawEllipse(self.line.p2(), 10, 10)
            painter.setBrush(br)

            if self.mode == StickMode.Measurement and self.proposed_snow_height >= 0:
                point = QPointF(self.boundingRect().x(), -self.proposed_snow_height + self.line.p2().y())
                pen = QPen(QColor(200, 100, 0, 255), 3.0)
                painter.setPen(pen)
                painter.drawLine(point,
                                 point + QPointF(self.boundingRect().width(), 0.0))

            if self.measured_height >= 0:
                vec = (self.stick.top - self.stick.bottom) / np.linalg.norm(self.stick.top - self.stick.bottom)
                dist_along_stick = self.measured_height / np.dot(np.array([0.0, -1.0]), vec)
                point = self.line.p2() + dist_along_stick * QPointF(vec[0], vec[1])
                point = QPointF(self.boundingRect().x(), point.y())
                pen = QPen(QColor(0, 100, 200, 255), 3.0)
                painter.setPen(pen)
                painter.drawLine(point,
                                 point + QPointF(self.boundingRect().width(), 0.0))
        else:
            painter.drawLine(self.line.p1(), self.line.p2())

        if self.selected:
            pen.setColor(QColor(255, 125, 0, 255))
            pen.setStyle(Qt.DashLine)
            painter.setPen(pen)
            painter.drawRect(self.boundingRect().marginsAdded(QMarginsF(5, 5, 5, 5)))

        if self.show_measurements:
            painter.fillRect(self.stick_label_text.boundingRect().translated(self.stick_label_text.pos()),
                             QBrush(QColor(0, 0, 0, 120)))
Beispiel #23
0
 def update(self, *args, **kwargs):
     self.setRect(self.textItem.boundingRect().marginsAdded(
         QMarginsF(10, 10, 10, 10)))
     QGraphicsEllipseItem.update(self, *args, **kwargs)
Beispiel #24
0
 def handle_highlight_animation_value_changed(self, new: QColor):
     if not self.deleting:
         self.update(self.boundingRect().marginsAdded(QMarginsF(10, 10, 10, 10)))