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>