Search code examples
pdfpyqt5pdf-generation

PDF margin using PYQT5


i am creating a PDF file with pyqt5, i would like to know how i can decrease the right margin. For now my code formats the text to occupy the full line.

i wrote this loop to break the lines but the text gets badly formatted afterwards

painter.setFont(font_body)
            description_txt = self.ui.txtDescription.toPlainText()

            for pul in range(7):
                self.cursor.insertBlock()

            for text in [description_txt]:
                for letter in range(len(text)):
                    if letter == 42 or letter == 84 or letter == 126 or letter == 168 or letter == 210 or letter == 252 or letter == 294 or letter == 336 or letter == 378 or letter == 420 or letter == 462 or letter == 504 or letter == 546 or letter == 588 or letter == 630:
                        self.cursor.insertText('\n')
                    self.cursor.insertText(text[letter])
                self.cursor.insertText('\n')

This is my output

The Main Window

PDF output

if I remove the loops, the text lines are on top of the images

EDIT: My printer, document and painter:

    self.printer = QPrinter(QPrinter.PrinterMode.HighResolution)
    self.printer.setOutputFormat(QPrinter.PdfFormat)
    self.printer.setOutputFileName('relatorio.pdf')
    painter = QtGui.QPainter()
    painter.begin(self.printer)
        
    self.document = QtGui.QTextDocument()
    self.document.setDefaultFont(font_body)
 self.document.setPageSize(QtCore.QSizeF(self.printer.width(),self.printer.height())) 
         
    self.cursor = QtGui.QTextCursor(self.document)
    self.cursor.movePosition(QtGui.QTextCursor.End)

Solution

  • as my friend said in the comments of the post, a way to solve the text formatting is to remove this line break function and change the pagesize of "document". the page size code would look like this:

    self.document.setPageSize(QtCore.QSizeF(5000, self.printer.height()))
    

    Change the value of 5000 to the value that best suits your needs.

    to change height value, change self.printer.height() to some int value