コード例 #1
0
    def __init__(self, page_width, page_height, crop_margin_width=0 * mm):
        self.page_width = page_width
        self.page_height = page_height
        self.margin_width = crop_margin_width
        self.include_crop_marks = bool(crop_margin_width)

        QApplication(['my-q-application'])
        f = QFontDatabase.addApplicationFont(
            '../../fonts/OldStandard-Regular.ttf')
        f = QFontDatabase.addApplicationFont('OldStandard-Italic.ttf')
        f = QFontDatabase.addApplicationFont('OldStandard-Bold.ttf')
        f = QFontDatabase.addApplicationFont('fonts/Inconsolata-Regular.ttf')
        f = QFontDatabase.addApplicationFont('fonts/UbuntuMono-R.ttf')
        f = QFontDatabase.addApplicationFont('../../fonts/GenBasB.ttf')
        f = QFontDatabase.addApplicationFont('../../fonts/GenBasR.ttf')
        #f = QFontDatabase.addApplicationFont('../../fonts/Inconsolata-Regular.ttf')
        # print(f)
        names = QFontDatabase.applicationFontFamilies(f)
        # print(names)
        self.writer = QPdfWriter('book.pdf')
        size = QSizeF(as_mm(2 * crop_margin_width + page_width),
                      as_mm(2 * crop_margin_width + page_height))
        print(size)
        self.writer.setPageSizeMM(size)
        margins = QMarginsF(as_mm(crop_margin_width), as_mm(crop_margin_width),
                            as_mm(crop_margin_width), as_mm(crop_margin_width))
        print(margins)
        self.writer.setPageMargins(margins, QPageLayout.Millimeter)
        self.painter = QPainter(self.writer)
        if self.include_crop_marks:
            self.draw_crop_marks()
コード例 #2
0
    def save_report(self, filename="", extension=".HTML"):
        """
        Save the generated report to the specified file
        Currently only html
        """
        full_filename = filename + extension.lower()
        full_filename = os.path.join(
            self._project_control.get_project_dir_absolute_path(),
            full_filename)

        if not self.report_html:
            self.__log.info("No report to save")
            return

        if extension == '.HTML':
            # HTML can contain non-ascii, so need to open with right encoding
            with open(full_filename, 'w', encoding='utf-8') as report_file:
                report_file.write(self.report_html)
                self.__log.info("Report written")
        elif extension == '.PDF':
            document = QTextDocument(parent=None)
            document.setHtml(self.report_html)
            printer = QPdfWriter(full_filename)
            printer.setPageSize(printer.A3)  # A3 to fit A4 page
            document.print_(printer)
        else:
            raise NotImplementedError

        # Show the generated report in the default browser
        url = os.path.realpath(full_filename)
        open_url(url=url)
コード例 #3
0
ファイル: qpdfwriter_test.py プロジェクト: hz658832/PySide2
 def testWrite(self):
     temporaryFile = QTemporaryFile(QDir.tempPath() + "/pdfwriter_test_XXXXXX.pdf")
     self.assertTrue(temporaryFile.open())
     pdfWriter = QPdfWriter(temporaryFile)
     pdfWriter.setPageLayout(QPageLayout(QPageSize(QPageSize.A4), QPageLayout.Portrait, QMarginsF(10, 10, 10, 10)))
     doc = QTextDocument("Some text")
     doc.print_(pdfWriter)
     temporaryFile.close()
     self.assertTrue(temporaryFile.size() > 0)
コード例 #4
0
class Renderer(object):
    def __init__(self, page_width, page_height, crop_margin_width=0 * mm):
        self.page_width = page_width
        self.page_height = page_height
        self.margin_width = crop_margin_width
        self.include_crop_marks = bool(crop_margin_width)

        QApplication(['my-q-application'])
        f = QFontDatabase.addApplicationFont(
            '../../fonts/OldStandard-Regular.ttf')
        f = QFontDatabase.addApplicationFont('OldStandard-Italic.ttf')
        f = QFontDatabase.addApplicationFont('OldStandard-Bold.ttf')
        f = QFontDatabase.addApplicationFont('fonts/Inconsolata-Regular.ttf')
        f = QFontDatabase.addApplicationFont('fonts/UbuntuMono-R.ttf')
        f = QFontDatabase.addApplicationFont('../../fonts/GenBasB.ttf')
        f = QFontDatabase.addApplicationFont('../../fonts/GenBasR.ttf')
        #f = QFontDatabase.addApplicationFont('../../fonts/Inconsolata-Regular.ttf')
        # print(f)
        names = QFontDatabase.applicationFontFamilies(f)
        # print(names)
        self.writer = QPdfWriter('book.pdf')
        size = QSizeF(as_mm(2 * crop_margin_width + page_width),
                      as_mm(2 * crop_margin_width + page_height))
        print(size)
        self.writer.setPageSizeMM(size)
        margins = QMarginsF(as_mm(crop_margin_width), as_mm(crop_margin_width),
                            as_mm(crop_margin_width), as_mm(crop_margin_width))
        print(margins)
        self.writer.setPageMargins(margins, QPageLayout.Millimeter)
        self.painter = QPainter(self.writer)
        if self.include_crop_marks:
            self.draw_crop_marks()

    def new_page(self):
        self.writer.newPage()
        if self.include_crop_marks:
            self.draw_crop_marks()

    def draw_crop_marks(self):
        pt = 1200 / 72.0
        m = self.margin_width * pt
        offset = 9 * pt
        weight = 0.25
        painter = self.painter

        if m < 9:
            return
        pen = QPen(Qt.black, weight, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin)
        painter.setPen(pen)

        w = self.page_width * pt
        h = self.page_height * pt

        for x in 0, w:
            painter.drawLine(QPoint(x, -m), QPoint(x, -offset))
            painter.drawLine(QPoint(x, h + m), QPoint(x, h + offset))
        for y in 0, h:
            painter.drawLine(QPoint(-m, y), QPoint(-offset, y))
            painter.drawLine(QPoint(w + m, y), QPoint(w + offset, y))
コード例 #5
0
class Document(object):

    def __init__(self, page_width, page_height, margin_width=0):
        self.page_width = page_width
        self.page_height = page_height
        self.margin_width = margin_width
        self.include_crop_marks = bool(margin_width)

        QApplication(['my-q-application'])
        f = QFontDatabase.addApplicationFont('OldStandard-Regular.ttf')
        f = QFontDatabase.addApplicationFont('OldStandard-Italic.ttf')
        f = QFontDatabase.addApplicationFont('OldStandard-Bold.ttf')
        names = QFontDatabase.applicationFontFamilies(f)
        print(names)
        self.writer = QPdfWriter('book.pdf')
        size = QSizeF((2 * margin_width + page_width) * mm,
                      (2 * margin_width + page_height) * mm)
        self.writer.setPageSizeMM(size)
        margins = QMarginsF(margin_width, margin_width,
                            margin_width, margin_width)
        self.writer.setPageMargins(margins)
        self.painter = QPainter(self.writer)
        if self.include_crop_marks:
            self.draw_crop_marks()

    def new_page(self):
        self.writer.newPage()
        if self.include_crop_marks:
            self.draw_crop_marks()

    def draw_crop_marks(self):
        pt = 1200 / 72.0
        m = self.margin_width * pt
        offset = 9 * pt
        weight = 0.25
        painter = self.painter

        if m < 9:
            return
        pen = QPen(Qt.black, weight, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin)
        painter.setPen(pen)

        w = self.page_width * pt
        h = self.page_height * pt

        for x in 0, w:
            painter.drawLine(QPoint(x, -m), QPoint(x, -offset))
            painter.drawLine(QPoint(x, h + m), QPoint(x, h + offset))
        for y in 0, h:
            painter.drawLine(QPoint(-m, y), QPoint(-offset, y))
            painter.drawLine(QPoint(w + m, y), QPoint(w + offset, y))
コード例 #6
0
    def __init__(self, page_width, page_height, margin_width=0):
        self.page_width = page_width
        self.page_height = page_height
        self.margin_width = margin_width
        self.include_crop_marks = bool(margin_width)

        QApplication(['my-q-application'])
        f = QFontDatabase.addApplicationFont('OldStandard-Regular.ttf')
        f = QFontDatabase.addApplicationFont('OldStandard-Italic.ttf')
        f = QFontDatabase.addApplicationFont('OldStandard-Bold.ttf')
        names = QFontDatabase.applicationFontFamilies(f)
        print(names)
        self.writer = QPdfWriter('book.pdf')
        size = QSizeF((2 * margin_width + page_width) * mm,
                      (2 * margin_width + page_height) * mm)
        self.writer.setPageSizeMM(size)
        margins = QMarginsF(margin_width, margin_width,
                            margin_width, margin_width)
        self.writer.setPageMargins(margins)
        self.painter = QPainter(self.writer)
        if self.include_crop_marks:
            self.draw_crop_marks()
コード例 #7
0
    form.setLayout(layout)

    window2 = MainWindow2()
    window2.show()

    ui_file = QFile("mainwindow2.ui")
    ui_file.open(QFile.ReadOnly)
    loader = QUiLoader()
    window3 = loader.load(ui_file)
    ui_file.close()
    window3.show()

    from PySide2.QtGui import QPdfWriter, QPainter, QPagedPaintDevice, QFont
    from PySide2.QtCore import QMargins, QRect, Qt

    qpdf_writer = QPdfWriter("file.pdf")
    qpdf_writer.setPageSize(QPagedPaintDevice.A4)
    qpdf_writer.setPageMargins(QMargins(20, 20, 20, 20))

    painter = QPainter(qpdf_writer)
    painter.setPen(Qt.black)
    painter.setFont(QFont("Times", 10))

    rect = painter.viewport()

    painter.drawText(rect, Qt.AlignCenter, "QTEXAMPLE")
    painter.end()

    from PySide2.QtGui import QTextDocument
    from PySide2.QtPrintSupport import QPrinter
    from PySide2.QtWidgets import QTextEdit
コード例 #8
0
 def __init__(self, path):
     self.painter = None
     self.writer = QPdfWriter(path)
     margins = QMarginsF(0, 0, 0, 0)
     self.writer.setPageMargins(margins, QPageLayout.Millimeter)
コード例 #9
0
class Renderer:
    def __init__(self, path):
        self.painter = None
        self.writer = QPdfWriter(path)
        margins = QMarginsF(0, 0, 0, 0)
        self.writer.setPageMargins(margins, QPageLayout.Millimeter)

    def type_face(self, name):
        return TypeFace(name, self)

    def draw_ellipse(self, x, y, width, height, pen):
        self.painter.setPen(pen.qt_pen)
        self.painter.setBrush(pen.qt_brush)
        self.painter.drawEllipse(self.pts(x), self.pts(y), self.pts(width),
                                 self.pts(height))

    def draw_image(self, x, y, width, height, path, crop=None):
        image = QImage(path)
        rect = QRectF(self.pts(x), self.pts(y), self.pts(width),
                      self.pts(height))
        if crop is None:
            self.painter.drawImage(rect, image)
        else:
            sx, sy, sw, sh = crop
            source_rect = QRectF(
                sx * image.width(),
                sy * image.height(),
                sw * image.width(),
                sh * image.height(),
            )
            self.painter.drawImage(rect, image, source_rect)

    def draw_polyline(self, pen, *points):
        self.painter.setPen(pen.qt_pen)
        self.painter.setBrush(pen.qt_brush)
        self.painter.drawPolyline(
            [QPoint(self.pts(x), self.pts(y)) for x, y in points])

    def draw_line(self, start, end, pen):
        self.painter.setPen(pen.qt_pen)
        self.painter.drawLine(self.pts(start[0]), self.pts(start[1]),
                              self.pts(end[0]), self.pts(end[1]))

    def draw_rectangle(self, x, y, width, height, pen):
        self.painter.setPen(pen.qt_pen)
        self.painter.setBrush(pen.qt_brush)
        self.painter.drawRect(self.pts(x), self.pts(y), self.pts(width),
                              self.pts(height))

    def draw_text(self, x, y, font, string, indent=0 * mm):
        self.painter.setFont(font.qt_font)
        self.painter.setPen(Qt.black)
        self.painter.drawText(self.pts(x + indent), self.pts(y + font.ascent),
                              string)

    def new_page(self, width, height):
        size = QSizeF(as_mm(width), as_mm(height))
        self.writer.setPageSizeMM(size)
        if self.painter is None:
            self.painter = QPainter(self.writer)
        else:
            self.writer.newPage()

    def pen(self,
            width,
            color=(0, 0, 0),
            fill_color=None,
            round_cap=True,
            round_join=False):
        if fill_color is None:
            qt_brush = Qt.NoBrush
        else:
            qt_brush = QBrush(QColor(*fill_color))

        if color is None:
            qt_pen = Qt.NoPen
        else:
            qt_pen = QPen(
                QBrush(QColor(*color)),
                as_pt(width),
                cap=Qt.RoundCap if round_cap else Qt.FlatCap,
                join=Qt.RoundJoin if round_join else Qt.BevelJoin,
            )

        return Pen(qt_pen, qt_brush)

    def pts(self, distance):
        return as_inch(distance) * self.writer.resolution()

    def render(self, *pages, debug):
        for page in pages:
            if debug:
                print("Traversing page:")
            self.new_page(page.width, page.height)
            _draw(self,
                  page, (0 * mm, 0 * mm),
                  debug_indent=0 if debug else None)

        self.save()

    def save(self):
        self.painter.end()
        self.painter = None