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 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)
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)
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))
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))
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()
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
def __init__(self, path): self.painter = None self.writer = QPdfWriter(path) margins = QMarginsF(0, 0, 0, 0) self.writer.setPageMargins(margins, QPageLayout.Millimeter)
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