Bilder und Linien mit painter von QPainter in pdf-Layout einfügen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Mady
User
Beiträge: 7
Registriert: Mittwoch 17. Oktober 2018, 20:38

Sonntag 9. Dezember 2018, 09:33

Ich möchte gerne das Layout meiner pdf-Seite mit Python vorgeben.
Hierfür benutze ich den QPainter, da meine Pdf von Informationen aus einer Destopapplikation entsteht welche ich mit PyQt5 erstellt habe.

Kopfzeile und und Fußzeile bekomme ich hin.

Leider mach ich noch etwas falsch ein Bild und eine horizontale Linie einzufügen.
Ich möchte gerne oben rechts ein Logo stehen haben und darunter über die ganze Seite einen horizontalen Strich.

Hier mein code

Code: Alles auswählen

    def paintPage(self,pageNumber, pageCount, painter, doc, textRect, footerHeight):
        painter.save()
        textPageRect = QtCore.QRectF(QtCore.QPointF(0, pageNumber * doc.pageSize().height()), doc.pageSize())
        painter.setClipRect(textRect)
        painter.translate(0, -textPageRect.top())
        painter.translate(textRect.left(), textRect.top())
        doc.drawContents(painter)
        painter.restore()
        footerRect = QtCore.QRectF(textRect)
        footerRect.setTop(textRect.bottom())
        footerRect.setHeight(footerHeight)

        headerRect = QtCore.QRectF(textRect)
        headerRect.setTop(textRect.top())
        headerRect.setHeight(2 * footerHeight)

        # draw footer
        painter.save()
        pen = painter.pen()
        pen.setColor(QtCore.Qt.black)
        painter.setPen(pen)
        painter.drawText(footerRect, QtCore.Qt.AlignCenter, "Seite {} von {}".format(pageNumber + 1, pageCount))
        painter.drawText(headerRect, QtCore.Qt.AlignLeft, "{}\n{}".format('Projektname:', 'Projektnummer:'))


        painter.drawPicture(headerRect, QtCore.Qt.AlignRight, "beispiel_bild.png") ## funktioniert leider nicht
        painter.drawLine(headerRect, QtCore.Qt.AlignCenter) ## funktioniert leider nicht
        
        painter.restore()
Antworten