Wie setzen QTextDocument Ränder und andere Eigenschaften (setHTML, drucken Sie pdf-Dateien)?

Habe ich Folgendes certificate - Klasse zum erzeugen von pdf-Dokument aus Bildern und Daten. Nach der Einstellung Bild-Quellen, die ich nennen generate() Funktion und testen erhalten.pdf-Ausgabe-Datei. Das Dokument wird erstellt, basierend auf QTextDocument Klasse mit setHtml(html) Methode.

Das problem ist, dass ich riesige weiße Bereiche rund um das Dokument, während ich will den Titel 'BERICHT' mit logo-Bild, um auf der ganz oben auf der Seite. Ich möchte auch hinzufügen, um den unteren Rand der Tabelle, aber so wie ich es verstehe, wird nicht unterstützt durch Qt (Unterstützt HTML-Teilmenge).

Python ist3-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)

Habe ich nie ausgiebig html vor und noch nie gearbeitet mit QTextDocument, und würde schätzen jede Beratung, wie man Steuern Dokument die Margen und die Eigenschaften einer Tabelle.

Andere Verwandte Eigenschaft, die ich kontrollieren möchten, ist die Auflösung - ich nehme pixel, Bildgröße und wissen müssen, Seite und Marge Größen in Pixel.

BEARBEITET: Die Frage ist fast beantwortet von @mata. Ich kann jetzt alle Ränder und Auflösung, aber nicht verstehen, wie die Kontrolle Bild-und Schriftgrößen. E. g. wenn ich brauche, ein Bild ist immer 50mm breit und html-header und Haupttext schriftart, die Größen sind optisch die selben, wie es zu implementieren?

EDITED2: Der Letzte Teil ist, gelöst zu werden. Hier ist der modifizierte code von @mata, gibt es das gleiche Ergebnis für alle dpi Wert:

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

InformationsquelleAutor Katya | 2012-04-24

Schreibe einen Kommentar