Como definir margens QTextDocument e outras propriedades (setHTML, imprimir em pdf)?
Eu tenho o seguintecertificate
classe para produzir documentos em PDF com algumas imagens e dados. Depois de definir fontes de imagem, eu chamogenerate()
função e obter arquivo de saída test.pdf. O documento é criado com base emQTextDocument
classe usandosetHtml(html)
método.
O problema é que tenho enormes espaços em branco ao redor do documento, enquanto quero que o título 'REPORT' com a imagem do logotipo esteja no topo da página. Eu também gostaria de adicionar borda inferior para a tabela, mas como eu entendo, não é suportado pelo Qt (Subconjunto HTML Suportado).
Código 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>
Eu nunca usei extensivamente o html antes e nunca trabalhei com o QTextDocument, e gostaria de receber conselhos sobre como controlar as margens do documento e as propriedades da tabela.
Outra propriedade relacionada que desejo controlar é a resolução - uso o tamanho da imagem em pixels e preciso saber os tamanhos de página e margem em pixels.
EDITADO: A pergunta é quase respondida por @mata. Eu posso definir agora todas as margens e resolução, mas não entendo como controlar a imagem e os tamanhos das fontes. Por exemplo. se eu precisar que uma imagem tenha sempre 50 mm de largura, e os tamanhos de fonte do cabeçalho e do texto principal em html sejam visualmente os mesmos - como implementá-la?
EDITADO2: A última parte está resolvida também. Aqui está o código modificado por @mata, ele dá o mesmo resultado para qualquerdpi
valor:
<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>