Wie setze ich QTextDocument-Ränder und andere Eigenschaften (setHTML, print to pdf)?

Ich habe folgendescertificate Klasse zur Erstellung von PDF-Dokumenten aus einigen Bildern und Daten. Nach dem Einstellen der Bildquellen rufe ich angenerate() Funktion und Get test.pdf Ausgabedatei. Das Dokument wird basierend auf erstelltQTextDocument Klasse mitsetHtml(html) Methode.

Das Problem ist, dass ich riesige Leerzeichen um das Dokument herum habe, während der Titel "BERICHT" mit dem Logo ganz oben auf der Seite angezeigt werden soll. Ich möchte der Tabelle auch einen unteren Rand hinzufügen, aber soweit ich weiß, wird dieser von Qt nicht unterstützt (Unterstützte HTML-Teilmenge).

Python3-Code:

<code>class certificate:

def __init__(self):
    self.logo = None
    pdffile = 'test.pdf'
    self.histogram = None
    self.printer = QPrinter()
    self.printer.setPageSize(QPrinter.Letter)
    self.printer.setOutputFormat(QPrinter.PdfFormat)
    self.printer.setOutputFileName(pdffile)

def generate(self):
    document = QTextDocument()
    html = ""
    html += ('<head><title>Report</title><style></style></head>'
                 '<body><table width="100%"><tr>'
                    '<td><img src="{}" width="30"></td>'
                    '<td><h1>REPORT</h1></td>'
                 '</tr></table>'
                 '<p align=right><img src="{}" width="300"></p>'
                 '<p align=right>Sample</p></body>').format(self.logo, self.histogram)
    document.setHtml(html)
    document.print_(self.printer)
</code>

Ich habe zuvor noch nie ausgiebig HTML verwendet und habe noch nie mit QTextDocument gearbeitet. Ich würde mich über Ratschläge zur Steuerung der Dokumentränder und Tabelleneigenschaften freuen.

Eine weitere verwandte Eigenschaft, die ich steuern möchte, ist die Auflösung. Ich verwende die Pixelbildgröße und muss die Seiten- und Randgrößen in Pixel kennen.

BEARBEITET: Die Frage wird fast von @mata beantwortet. Ich kann jetzt beliebige Ränder und Auflösungen einstellen, verstehe aber nicht, wie man Bild- und Schriftgrößen steuert. Z.B. Wenn ich brauche, dass ein Bild immer 50 mm breit ist und die Schriftgrößen für HTML-Header und Haupttext visuell gleich sind - wie wird es implementiert?

EDITED2: Der letzte Teil ist auch gelöst. Hier ist modifizierter Code von @mata, es gibt das gleiche Ergebnis für alledpi Wert:

<code>dpi=96

document = QTextDocument()
html = """
<head>
    <title>Report</title>
    <style>
    </style>
</head>
<body>
    <table width="100%">
        <tr>
            <td><img src="{0}" width="{1}"></td>
            <td><h1>REPORT</h1></td>
        </tr>
    </table>
    <hr>
    <p align=right><img src="{2}" width="{3}"></p>
    <p align=right>Sample</p>
</body>
""".format('D:\Documents\IST Projects\diashape\docbook\Installation\images\istlogo_medium.png',
              40*dpi/96, 
              'D:\Documents\IST Projects\diashape\docbook\Installation\images\istlogo_medium.png', 
              200*dpi/96)

document.setHtml(html)

printer = QPrinter()
font = QFont()
font.setPointSize(12*dpi/96)
document.setDefaultFont(font)
printer.setResolution(dpi)
...
</code>

Antworten auf die Frage(1)

Ihre Antwort auf die Frage