Jak ustawić marginesy QTextDocument i inne właściwości (setHTML, print to pdf)?

Mam następującecertificate klasa do tworzenia dokumentu pdf z niektórych obrazów i danych. Po ustawieniu źródeł obrazu dzwonięgenerate() funkcja i pobierz plik wyjściowy test.pdf. Dokument jest tworzony na podstawieQTextDocument klasa używającasetHtml(html) metoda.

Problem polega na tym, że mam duże białe spacje wokół dokumentu, podczas gdy chcę, aby tytuł „RAPORT” z obrazem logo znajdował się na samej górze strony. Chciałbym także dodać dolną granicę do tabeli, ale jak rozumiem, nie jest ona obsługiwana przez Qt (Obsługiwany podzbiór HTML).

Kod Python3:

<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>

Nigdy wcześniej nie używałam html do końca i nigdy nie pracowałam z QTextDocument i byłabym wdzięczna za wszelkie porady dotyczące kontrolowania marginesów dokumentów i właściwości tabeli.

Inną pokrewną właściwością, którą chcę kontrolować, jest rozdzielczość - używam rozmiaru obrazu pikseli i muszę znać rozmiary stron i marginesów w pikselach.

EDYTOWANE: Na pytanie prawie odpowiada @mata. Mogę ustawić teraz dowolne marginesy i rozdzielczość, ale nie rozumiem, jak kontrolować rozmiar obrazu i czcionki. Na przykład. jeśli potrzebuję, aby obraz miał zawsze szerokość 50 mm, a rozmiary nagłówka html i głównego tekstu są takie same - jak go wdrożyć?

EDITED2: Ostatnia część również została rozwiązana. Tutaj jest zmodyfikowany kod przez @mata, daje taki sam wynik dla każdegodpi wartość:

<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>

questionAnswers(1)

yourAnswerToTheQuestion